Another revisement of the component spec

- Remove need for component key
- Allow for registering a system/component by class or a super class. This
  allows a plugin developer to completely replace the default
  components/systems in place with their own but at the same time also
  allowing for multiple component classes per entity (think two Inventory
  components for a player).
- Return an Optional on all getters/removals. Far better than just null.
- Javadoc clarifications
- Add utlity methods on Entity for adding a component

Signed-off-by: Chris Sanders <zidane@outlook.com>