I think the `dispose()` call should be more of an implementation detail. The service manager may want a way to kill them, or to kill the actual isolate, since there is an actual system cost to running isolates. I think from a client's perspective, the service should just be available to run it they can get an interface to it.

We'll definitely want to keep the compiler service running for a while. Each compile of dart2js gets faster, as V8 starts optimizing it.