Collision, forced abstract factory, broken enemy

Major restructuring of gameobject and component management. Using an
abstract factory for gameobjects, not very useful, but it's part of the
assignment.
Crazy merge fix