Decouple Routes from Route class in Dispatcher

There is no reason why the route factory method needs to be hardcoded
into the Routes constructor. With this change, alternative Route
implementations, decorated route factories, and easy mocking for tests
are all possible.
Refine class api of Routes

Adding and retrieving routes can now be done via explicit methods,
setRoute and getRoute. Array access now proxies to those new methods.
Refactor away Dispatcher\Routes

This class was almost entirely boilerplate implementation of SPL
interfaces to accomplish functionality that could otherwise be handled
by a standard ArrayIterator. The route loading itself was simply moved
to the front controller.
Routes are no longer container-aware

Having routes be responsible for adding themselves to and tracking
themselves in a given container violated the single-responsibility
principle. Routes can now be defined once and used in any number of
different containers (or none at all).
Comments/styles/structure of Dispatcher\Route
Route alias can be reset to null

Calling alias() on a route without any arguments will return a route
with a null alias. This is to make the alias() method behave more
similarly to the route() method.

This isn't resetting in the strictest sense since the original route
object is not modified.
Tests for Dispatcher\Route

These are especially important given the inheritence behaviors of the
immutable objects.