Allow abstract component types to have typed ids

Make sure add() in Entity properly fails if an abstract type is passed in. Must update component and bulk component iterators to use the union of an abstract type's concrete types. This isn't too hard for single component queries, but bulk queries get trickier because what happens if an entity has multiple of the abstract type, which to select?

A solution for now will be to add a getSubtypes() method on EntitySystem that returns all TypedIds currently within the system that are subtypes of the input type.