Disable websocket compression on service port (dart-lang/coverage#258)

This disables websocket compression when connecting to the VM service
port. Since almost all invocations of coverage collection tools happen
over a loopback connection to localhost, websocket compression uses a
ton of CPU, which causes a performance hit rather than a performance
benefit.
diff --git a/pkgs/coverage/CHANGELOG.md b/pkgs/coverage/CHANGELOG.md
index af0e724..fc834fb 100644
--- a/pkgs/coverage/CHANGELOG.md
+++ b/pkgs/coverage/CHANGELOG.md
@@ -1,5 +1,8 @@
 ## dev
 
+ * Disables WebSocket compression for coverage collection. Since almost all
+   coverage collection runs happen over the loopback interface to localhost,
+   this improves performance and reduces CPU usage.
  * Migrates implementation of VM service protocol library from
    `package:vm_service_client`, which is no longer maintained, to
    `package:vm_service_lib`, which is.
diff --git a/pkgs/coverage/lib/src/collect.dart b/pkgs/coverage/lib/src/collect.dart
index 71bad0d..aef1c7f 100644
--- a/pkgs/coverage/lib/src/collect.dart
+++ b/pkgs/coverage/lib/src/collect.dart
@@ -3,9 +3,9 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:io';
 
 import 'package:vm_service_lib/vm_service_lib.dart';
-import 'package:vm_service_lib/vm_service_lib_io.dart';
 import 'util.dart';
 
 const _retryInterval = Duration(milliseconds: 200);
@@ -37,7 +37,13 @@
   VmService service;
   await retry(() async {
     try {
-      service = await vmServiceConnectUri('$uri', log: StdoutLog());
+      final options = const CompressionOptions(enabled: false);
+      final socket = await WebSocket.connect('$uri', compression: options);
+      final controller = StreamController<String>();
+      socket.listen((dynamic data) => controller.add(data));
+      service = VmService(
+          controller.stream, (String message) => socket.add(message),
+          log: StdoutLog(), disposeHandler: () => socket.close());
       await service.getVM().timeout(_retryInterval);
     } on TimeoutException {
       service.dispose();