whole_func_string: function(props) {
          if (typeof props != 'object') { throw new Error('expected object'); }
  
          var child = Object.create(this);
          mixin(child, props);
          child.fastdom = this;
  
          // run optional creation hook
          if (child.initialize) { child.initialize(); }
  
          return child;
      }
func_code_string: function(props) {
          if (typeof props != 'object') { throw new Error('expected object'); }
  
          var child = Object.create(this);
          mixin(child, props);
          child.fastdom = this;
  
          // run optional creation hook
          if (child.initialize) { child.initialize(); }
  
          return child;
      }
func_documentation_string: Extend this FastDom with some
  custom functionality.
  
  Because fastdom must *always* be a
  singleton, we're actually extending
  the fastdom instance. This means tasks
  scheduled by an extension still enter
  fastdom's global task queue.
  
  The 'super' instance can be accessed
  from `this.fastdom`.
  
  @example
  
  var myFastdom = fastdom.extend({
  initialize: function() {
  // runs on creation
  },
  
  // override a method
  measure: function(fn) {
  // do extra stuff ...
  
  // then call the original
  return this.fastdom.measure(fn);
  },
  
  ...
  });
  
  @param  {Object} props  properties to mixin
  @return {FastDom}