static createFunctionComponent (func) {
    // using a cached class so that we can check of equality
    let ComponentClass = func._ComponentClass
    if (!ComponentClass) {
      // if the given argument is actually a Class Component then just return that
      if (func.prototype && func.prototype._isComponent) {
        return func
      }
      ComponentClass = class FunctionComponent extends Component {
        render ($$) {
          return func(this.props, $$)
        }
      }
      ComponentClass.displayName = func.name || uuid('FunctionComponent@')
      // caching the generated class so we can later check for equality
      func._ComponentClass = ComponentClass
      func._isFunctionComponent = true
    }
    return ComponentClass
  }
Turns a given function into a component.

Similar to react's concept of a Function Component,
but mainly just for convenience.
The given function is wrapped into an Anonymous Component class,
which is just a regular component.
However, it is not possible to access the component instance
as the function is not bound to the component.

@param {function} func