Allow service factory functions to return promises

Here is a cleaned up PR for allowing User-Defined Services to be promise-fulfilled.

The original PR (Which I subsequently ruined with sloppy Giting... oops) is here: https://github.com/angular/angular.js/pull/3195

This PR includes docs changes as well as unit tests in addition to moving some of the logic into $q.all() as suggested.

Please see discussion on the old PR, and as always don't hesitate to take me to school ;-)