Component extension interface

Addresses inconsistencies raised in the second half of issue #86. Specifically a `addToSystem` was added to the public interface and `doAddToSystem()` is virtual and exclusively used for extension. The calls to the (sub)components and the base Component's bookkeeping have been pulled out so they are invoked no matter what. The convention to call `Super::doAddToSystem` first in derived types can be applied consistently and ensures that resources added by your Super (if any) are also available in derived types.