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.
I don't think it's worth caring if locals change, users could make a copy themselves if they know it's going to change