code: func HandlerWith(handler Handler, keyvals ...interface{}) Handler {
  	if len(keyvals) == 0 {
  		return handler
  	}
  
  	kvs, handler := extractHandlerContext(handler)
  
  	kvs = append(kvs, keyvals...)
  
  	if len(kvs)%2 != 0 {
  		kvs = append(kvs, nil)
  	}
  
  	// Limiting the capacity of the stored keyvals ensures that a new
  	// backing array is created if the slice must grow in HandlerWith.
  	// Using the extra capacity without copying risks a data race.
  	return newContextualHandler(handler, kvs[:len(kvs):len(kvs)])
  }
docs: // The implementation bellow is heavily influenced by go-kit's log context.
  // HandlerWith returns a new error handler with keyvals context appended to it.
  // If the wrapped error handler is already a contextual error handler created by HandlerWith or HandlerWithPrefix
  // keyvals is appended to the existing context, but a new error handler is returned.
  //
  // The created handler will prepend it's own context to the handled errors.