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. 
I like that structure! Putting the virtual method in the middle lets the base class take care of itself with no help from the derived classes. Ideally this same structure would be replicated down the inheritance chain so that each newly-derived object could operate in ignorance of its parent's implementation.