Make StreamQueue start listening immediately to broadcast streams. (#119)

When a `StreamQueue` is created for a broadcast stream, it didn't use to listen to the stream immediately, which means that any events sent before the first call to `next` (or any other queue request) would be silently lost. That makes an initial `peek` operation change the behavior of the queue, which is confusing to users.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4675114..f247608 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.4.2
+
+* `StreamQueue` starts listening immediately to broadcast strings.
+
 ## 2.4.1
 
 * Deprecate `DelegatingStream.typed`. Use `Stream.cast` instead.
diff --git a/lib/src/stream_queue.dart b/lib/src/stream_queue.dart
index 97d74c7..278e249 100644
--- a/lib/src/stream_queue.dart
+++ b/lib/src/stream_queue.dart
@@ -118,7 +118,13 @@
   factory StreamQueue(Stream<T> source) => StreamQueue._(source);
 
   // Private generative constructor to avoid subclasses.
-  StreamQueue._(this._source);
+  StreamQueue._(this._source) {
+    // Start listening immediately if we could otherwise lose events.
+    if (_source.isBroadcast) {
+      _ensureListening();
+      _pause();
+    }
+  }
 
   /// Asks if the stream has any more events.
   ///
diff --git a/pubspec.yaml b/pubspec.yaml
index 599ccdd..0cb71cf 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: async
-version: 2.4.1
+version: 2.4.2
 
 description: Utility functions and classes related to the 'dart:async' library.
 homepage: https://www.github.com/dart-lang/async