code: 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]
  }
docs: @function getFunction
  
  get and optionally create a new function. if function is passed then new
  function will be created, otherwise existing function will be returned.
  
  errors will be thrown on attempts to create multiple functions with the
  same name.
  
  error will be thrown if attempting to get function that is not defined.
  
  @param {string} functionName - name of function
  @param {object} functionObj - function (optional)
  @param {object} options - options (optional)
  
  @returns {function}
  
  @throws {Error}