feat($injector): allow service factories to return promises

Change $injector's invoke method to delay the invocation in the event that an
injected service is a promise. The change allows user-land services to be
constructed asyncronously if they simply return a promise from their factory
function.

For any invocation that does not have promises as dependencies, the invocation
happens immediately, as though this change was not in place.

It may be interesting to note that in cases where the invocation does have
promise (async-fulfilled) dependencies, the call to invoke will itself return
a promise. There is ongoing discussion as to the merrits of this relatively
non-deterministic behavior, though it is not considered 'BREAKING' because
currently there is no support for asynchronously-generated services.