Added overdraw visualization.

(reading a bit more of the code) So the way I'd do this is remove the visualizer from the critical path and flip the logic out to the playback class.

Right now, the playback passes through the actual playback function to a bunch of different places in the visualizer stack and the exact semantics of the call are difficult to follow. It looks like the end result is to allow you to perform logic before, after, or around a given playback call.

If instead you registered pre/post/(and maybe)wrapping handlers you could make the semantics much clearer, prevent the need for passing functions, and enable multiple visualizers to run at once.
For example, if instead of a CALLS map of Call objects you had a MUTATORS map of Mutator objects that each had (optional) pre/post/wrap handlers, you could have a similarly-easy-to-define but much lighter-weight call routine: playback would do:
```
for each visualizer:
  visualizer.handlePreEvent(it);
playback(it);
for each visualizer:
  visualizer.handlePostEvent(it);
```

The handlePre/PostEvent method would do the `if (!active) return;` and lookup the mutator for the event; if it has a fn registered for the lifecycle event (pre/post) then it calls that. That way no code in the visualizers has to know about active state, no code needs to know about the callFunction/pass it around, and writing visualizers becomes easier as you just do things like add a `'drawElements': {pre:function(it, gl, args) {//do something}}` and know what's going to happen.