addNativeFunction(name, source, settings) {
    if (this.kernels.length > 0) {
      throw new Error('Cannot call "addNativeFunction" after "createKernels" has been called.');
    }
    this.nativeFunctions.push(Object.assign({ name, source }, settings));
    return this;
  }
@desc Adds additional native functions, that the kernel may call.
@param {String} name - native function name, used for reverse lookup
@param {String} source - the native function implementation, as it would be defined in it's entirety
@param {object} [settings]
@returns {GPU} returns itself