fix($interval): do not invoke $apply when invokeApply is false

This CL allows $q Deferred objects to avoid invoking $rootScope.$digest, by optionally adding asynchronously invoked functions to a different queue which is processed outside of $digest.

Needless to say, this is a hack, and it would be great if there was a better way to do this (such as not using Promises for $interval at all). However, I felt that changing the API to not use promises would have been a much bigger API change than this.

Serious review needed!

Closes #7103