Add support for ServiceProviders to the DI Container

Service Providers allow a nice way to encapsulate setup procedures for services on the Container. This is a sort-of replacement for our historical usage of JFactory.