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. 
@sherm1 `finalizeFromProperties` has not been fixed yet. I first made them called consistently at the end (like I did with Joints) since if that works then the sequencing by the base will also work. Sorry for not making that more clear. This PR is only addressing addToSystem (since this was the main culprit in previous discussions).

Since you've reviewed, I am happy to remove this PR and make the changes to everything else. I just wanted some feedback before doing so.