Add alias support to DI

Alias support is something that I've been meaning to add to the DI container. It's useful, as shown by the JTracker project needing to extend the container in order to add it themselves.

This also makes the private class properties protected so that devs can safely extend our container and still have access to the properties.

The new additions retain the 100% code coverage: http://d.pr/i/DxOc