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.
this is something that we might not need, since we might not want to keep an object alive until the next turn.

But it's consistent with $eval, so maybe it's not bad