do less IO in the app when running tests

This CL attempts to stabilize our build bot a bit; the tests have been very flaky lately (https://drone.io/github.com/dart-lang/spark). It's a bit of a superstitious CL. I'm operating under the assumption that a lot of the test flakes are due to IO not completing.

- convert all calls to `chrome.runtime.getPackageDirectoryEntry()` to a new utility method, `getPackageDirectoryEntry()`. It only calls through to the chrome API method once.
- make sure we only create the SDK once for the services, and once for the test runs
- compress the sdk contents. This changes the ~5MB sdk file into a 690k file. There's a lot less data for us to move around - I think this has a positive impact on our startup time. The decompression happens in the services isolate, so it should be ~free for us.

@ussuri, @sunglim