Enable prefer_typing_unitialized_varables lint (#30)

Work towards #29

Using the lint catches a bug were an uninitialized variable was causing
an instantiation to pick up a reified type of `dynamic` instead of a
useful type.
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 107424e..bf7c331 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -10,3 +10,4 @@
 linter:
   rules:
     - comment_references
+    - prefer_typing_uninitialized_variables
diff --git a/lib/src/isolate_channel.dart b/lib/src/isolate_channel.dart
index 290c2ff..4a1717d 100644
--- a/lib/src/isolate_channel.dart
+++ b/lib/src/isolate_channel.dart
@@ -49,7 +49,7 @@
     // The first message across the ReceivePort should be a SendPort pointing to
     // the remote end. If it's not, we'll make the stream emit an error
     // complaining.
-    var subscription;
+    StreamSubscription<T> subscription;
     subscription = receivePort.listen((message) {
       if (message is SendPort) {
         var controller = new StreamChannelController<T>(
diff --git a/lib/src/multi_channel.dart b/lib/src/multi_channel.dart
index a1ee057..a6d684a 100644
--- a/lib/src/multi_channel.dart
+++ b/lib/src/multi_channel.dart
@@ -72,7 +72,7 @@
   ///
   /// Throws an [ArgumentError] if a virtual channel already exists for [id].
   /// Throws a [StateError] if the underlying channel is closed.
-  VirtualChannel<T> virtualChannel([id]);
+  VirtualChannel<T> virtualChannel([int id]);
 }
 
 /// The implementation of [MultiChannel].
@@ -166,15 +166,15 @@
         onError: _mainController.local.sink.addError);
   }
 
-  VirtualChannel<T> virtualChannel([id]) {
-    var inputId;
-    var outputId;
+  VirtualChannel<T> virtualChannel([int id]) {
+    int inputId;
+    int outputId;
     if (id != null) {
       // Since the user is passing in an id, we're connected to a remote
       // VirtualChannel. This means messages they send over this channel will
       // have the original odd id, but our replies will have an even id.
       inputId = id;
-      outputId = (id as int) + 1;
+      outputId = id + 1;
     } else {
       // Since we're generating an id, we originated this VirtualChannel. This
       // means messages we send over this channel will have the original odd id,
@@ -256,7 +256,7 @@
   /// This can be sent across the [MultiChannel] to provide the remote endpoint
   /// a means to connect to this channel. Nothing about this is guaranteed
   /// except that it will be JSON-serializable.
-  final id;
+  final int id;
 
   final Stream<T> stream;
   final StreamSink<T> sink;
diff --git a/test/disconnector_test.dart b/test/disconnector_test.dart
index 5b72574..62ef78b 100644
--- a/test/disconnector_test.dart
+++ b/test/disconnector_test.dart
@@ -9,10 +9,10 @@
 import 'package:test/test.dart';
 
 void main() {
-  var streamController;
-  var sinkController;
-  var disconnector;
-  var channel;
+  StreamController streamController;
+  StreamController sinkController;
+  Disconnector disconnector;
+  StreamChannel channel;
   setUp(() {
     streamController = new StreamController();
     sinkController = new StreamController();
diff --git a/test/isolate_channel_test.dart b/test/isolate_channel_test.dart
index 8f33184..00f4584 100644
--- a/test/isolate_channel_test.dart
+++ b/test/isolate_channel_test.dart
@@ -11,9 +11,9 @@
 import 'package:test/test.dart';
 
 void main() {
-  var receivePort;
-  var sendPort;
-  var channel;
+  ReceivePort receivePort;
+  SendPort sendPort;
+  StreamChannel channel;
   setUp(() {
     receivePort = new ReceivePort();
     var receivePortForSend = new ReceivePort();
@@ -126,7 +126,7 @@
   });
 
   group("connect constructors", () {
-    var connectPort;
+    ReceivePort connectPort;
     setUp(() {
       connectPort = new ReceivePort();
     });
diff --git a/test/json_document_transformer_test.dart b/test/json_document_transformer_test.dart
index d6fd72b..3c6d11c 100644
--- a/test/json_document_transformer_test.dart
+++ b/test/json_document_transformer_test.dart
@@ -9,8 +9,8 @@
 import 'package:test/test.dart';
 
 void main() {
-  var streamController;
-  var sinkController;
+  StreamController<String> streamController;
+  StreamController<String> sinkController;
   StreamChannel<String> channel;
   setUp(() {
     streamController = new StreamController<String>();
diff --git a/test/multi_channel_test.dart b/test/multi_channel_test.dart
index 99a53c3..ddc4150 100644
--- a/test/multi_channel_test.dart
+++ b/test/multi_channel_test.dart
@@ -6,9 +6,9 @@
 import 'package:test/test.dart';
 
 void main() {
-  var controller;
-  var channel1;
-  var channel2;
+  StreamChannelController controller;
+  MultiChannel channel1;
+  MultiChannel channel2;
   setUp(() {
     controller = new StreamChannelController();
     channel1 = new MultiChannel<int>(controller.local);
@@ -84,8 +84,8 @@
   });
 
   group("a locally-created virtual channel", () {
-    var virtual1;
-    var virtual2;
+    VirtualChannel virtual1;
+    VirtualChannel virtual2;
     setUp(() {
       virtual1 = channel1.virtualChannel();
       virtual2 = channel2.virtualChannel(virtual1.id);
@@ -184,8 +184,8 @@
   });
 
   group("a remotely-created virtual channel", () {
-    var virtual1;
-    var virtual2;
+    VirtualChannel virtual1;
+    VirtualChannel virtual2;
     setUp(() {
       virtual1 = channel1.virtualChannel();
       virtual2 = channel2.virtualChannel(virtual1.id);
@@ -296,8 +296,8 @@
   });
 
   group("when the underlying stream", () {
-    var virtual1;
-    var virtual2;
+    VirtualChannel virtual1;
+    VirtualChannel virtual2;
     setUp(() {
       virtual1 = channel1.virtualChannel();
       virtual2 = channel2.virtualChannel(virtual1.id);
@@ -405,8 +405,8 @@
     });
 
     group("for a virtual channel:", () {
-      var virtual1;
-      var virtual2;
+      VirtualChannel virtual1;
+      VirtualChannel virtual2;
       setUp(() {
         virtual1 = channel1.virtualChannel();
         virtual2 = channel2.virtualChannel(virtual1.id);
diff --git a/test/stream_channel_completer_test.dart b/test/stream_channel_completer_test.dart
index 8d83005..666efe9 100644
--- a/test/stream_channel_completer_test.dart
+++ b/test/stream_channel_completer_test.dart
@@ -8,10 +8,10 @@
 import 'package:test/test.dart';
 
 void main() {
-  var completer;
-  var streamController;
-  var sinkController;
-  var innerChannel;
+  StreamChannelCompleter completer;
+  StreamController streamController;
+  StreamController sinkController;
+  StreamChannel innerChannel;
   setUp(() {
     completer = new StreamChannelCompleter();
     streamController = new StreamController();
diff --git a/test/stream_channel_controller_test.dart b/test/stream_channel_controller_test.dart
index c092570..483b7f6 100644
--- a/test/stream_channel_controller_test.dart
+++ b/test/stream_channel_controller_test.dart
@@ -7,7 +7,7 @@
 
 void main() {
   group("asynchronously", () {
-    var controller;
+    StreamChannelController controller;
     setUp(() {
       controller = new StreamChannelController();
     });
@@ -44,7 +44,7 @@
   });
 
   group("synchronously", () {
-    var controller;
+    StreamChannelController controller;
     setUp(() {
       controller = new StreamChannelController(sync: true);
     });
diff --git a/test/with_close_guarantee_test.dart b/test/with_close_guarantee_test.dart
index a6527a7..8e1b631 100644
--- a/test/with_close_guarantee_test.dart
+++ b/test/with_close_guarantee_test.dart
@@ -16,8 +16,8 @@
     new StreamSinkTransformer.fromStreamTransformer(_delayTransformer);
 
 void main() {
-  var controller;
-  var channel;
+  StreamChannelController controller;
+  StreamChannel channel;
   setUp(() {
     controller = new StreamChannelController();
 
diff --git a/test/with_guarantees_test.dart b/test/with_guarantees_test.dart
index e1302f6..dcdffe0 100644
--- a/test/with_guarantees_test.dart
+++ b/test/with_guarantees_test.dart
@@ -8,9 +8,9 @@
 import 'package:test/test.dart';
 
 void main() {
-  var streamController;
-  var sinkController;
-  var channel;
+  StreamController streamController;
+  StreamController sinkController;
+  StreamChannel channel;
   setUp(() {
     streamController = new StreamController();
     sinkController = new StreamController();