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.
we might not really want to support this, but it doesn't hurt