function applySegment(func, segment, full, boundThis, args, inContextCB) {
  const context = this.tracer.getContext()
  const newContext = context.enterSegment({ segment })
  return this.applyContext({ func, context: newContext, full, boundThis, args, inContextCB })
}
Binds a function to the async context manager with the segment passed in. It'll pull
the active transaction from the context manager.

- `applySegment(func, segment, full, context, args[, inContextCB])`

@memberof Shim.prototype
@param {Function} func The function to execute in the context of the given segment.
@param {TraceSegment} segment The segment to make active for the duration of the function.
@param {boolean} full Indicates if the full lifetime of the segment is bound to this function.
@param {*} boundThis The `this` argument for the function.
@param {Array.<*>} args The arguments to be passed into the function.
@param {Function} [inContextCB] The function used to do more instrumentation work. This function is
 guaranteed to be executed with the segment associated with.
@returns {*} Whatever value `func` returned.