Task 6.5

Note: Moved to #35 to deal with merge conflicts.

## Summary ##
Implemented all the back-end infrastructure required to support composite collision volumes.  Making this infrastructure extensible involved adding a new type, `CompositeHitbox`, to represent a collection of collision volumes that could be moved and scaled in tandem.  At the moment, the `CompositeHitbox` type only supports translation, but it can easily be extended if need be to support other linear algebra methods such as skewing and scaling.

Most of the other changes made in this branch involved updating other back-end infrastructure from single volume rectangles (i.e. `HashableRect`) to multi-part volumes (i.e. `CompositeHitbox`).  There is still some merging that needs to be done (particularly with the `MoveState` and `GameWorld` types), but that can most easily be accomplished at the pre-iteration meeting.

## Change List ##

### `Hitbox` Class ###
- Added the `Hitbox` class.
- Replaced all instances of `HashableRect` with `Hitbox` to better gel with the names of related back-end types.

### `CompositeHitbox` Class ###
- Added the `CompositeHitbox` class.
- Replaced all instances of `HashableRect` used as a collision volume with `CompositeHitbox`.

### `PhysicalState` Class ###
- Replaced all instances of `HashableRect` used as a collision volume with `CompositeHitbox`.
- Updated the tests to reflect the upgrade from `HashableRect` to `CompositeHitbox`.

### `SimulationDelta` Class ###
- Replaced all instances of `HashableRect` used as a collision volume with `CompositeHitbox`.
- Updated the tests to reflect the upgrade from `HashableRect` to `CompositeHitbox`.