function registerComponent(name, rawComponent, ...hocs) {
  // support single-argument syntax
  if (typeof arguments[0] === 'object') {
    // note: cannot use `const` because name, components, hocs are already defined
    // as arguments so destructuring cannot work
    // eslint-disable-next-line no-redeclare
    var { name, component, hocs = [] } = arguments[0];
    rawComponent = component;
  }
  // store the component in the table
  ComponentsTable[name] = {
    name,
    rawComponent,
    hocs,
  };
}
Register a Vulcan component with a name, a raw component than can be extended
and one or more optional higher order components.

@param {String} name The name of the component to register.
@param {Component} rawComponent Interchangeable/extendable react component.
@param {...(Function|Array)} hocs The HOCs to compose with the raw component.

Note: when a component is registered without higher order component, `hocs` will be
an empty array, and it's ok!
See https://github.com/reactjs/redux/blob/master/src/compose.js#L13-L15

@returns Structure of a component in the list:

ComponentsTable.Foo = {
   name: 'Foo',
   hocs: [fn1, fn2],
   rawComponent: React.Component,
   call: () => compose(...hocs)(rawComponent),
}