docs: function getFunction (functionName, functionObj, options) {
      // if function not being defined then attempt to get
      if (!defined(functionObj)) {
          // require function to be defined
          if (!defined(immutable.functions[functionName])) {
              throw new Error(`function error: function not found ${functionName}`)
          }
          // return function
          return immutable.functions[functionName]
      }
      // get validated options with defaults set
      options = getValidOptions(options, true)
      // throw error if function already defined and allow override not
      if (defined(immutable.functions[functionName]) && !options.allowOverride) {
          throw new Error(`function error: ${functionName} already defined`)
      }
      // create new function
      immutable.functions[functionName] = new ImmutableFunction(functionName, functionObj, options)
      // return function
      return immutable.functions[functionName]
  }