Add Lazy Worker

#### Overview:
One of the problems we've seen while auditing the inspector's perf, is that the injected script (agent) is a CPU hog during app start and app navigation. The reason for this, we believe, is that serializing hundreds of views and models can take about as much time as it takes to create and show the page layout. 

Our solution for this is to defer the work of serializing the views and models until after the layout has been created and shown. Enters the LazyWorker. The LazyWorker is responsible for queueing up work that it will do when things settle down. Another feature of the LazyWorker is that it will not work for more than it's alotted time. That means that the LazyWorker should not use up valuable cpu cycles when we're showing a layout nor should it create significant jank because it does not run for too long either. 

Thanks @joshbedo for pairing on this

### Takeaway

The inspector went from taking 10 second for a large layout render to <1 seconds. Translated into experience, it went from shitty to approximately normal app perf. this is awesome sauce...

### review plz
@paulfalgout, @cmaher, @ianmstew, @samccone, @thejameskyle, @jmeas, @megawac  - mind lending your time to this guy? This is an important pattern that we're setting up so I'd like to get as much of a critical discussion as possible now...
Are ServiceWorkers allowed in extensions?