Added CPPCOMPONENTS_REGISTER macro.

Note that this is a breaking change. Implementations now all need to be
registered with CPPCOMPONENTS_REGISTER(Implementation)