code: function multiMethod(inner, deco) {
  	deco = deco || inner.decorate || decorator(inner);
  	let d = deco();
  	return (...args) => {
  		let l = args.length;
  		return (l<2 ? deco : (l>2 ? d : inner))(...args);
  	};
  }
docs: Creates a function that supports the following calling styles:
  d() - returns an unconfigured decorator
  d(opts) - returns a configured decorator
  d(fn, opts) - returns a decorated proxy to `fn`
  d(target, key, desc) - the decorator itself
  
  @Example:
  // simple identity deco:
  let d = multiMethod( fn => fn );
  
  class Foo {
  @d
  bar() { }
  
  @d()
  baz() { }
  
  @d({ opts })
  bat() { }
  
  bap = d(() => {})
  }