feat(*): coalesce $apply calls which occur close together WIP

This is a work-in-progress, implementing what has been discussed with @kseamon and @IgorMinar

There are some open questions about this still, this first commit is a bit more feature-packed
than the original implementation, and maybe some of that stuff should be trimmed down or changed
a bit.

Adding support for $http now.
Is it a valid concern that locals would change between the call and the execution (Should we make a copy)?