Buffering would require eager iteration of the iterable of streams.  The lazy iteration it currently uses allows the Streams to be created only when the previous stream completes, using e.g. `concat(list.map(createStream))`.  It also allows infinite iterables.  Also, I wonder if buffering lots of broadcast Streams could have memory issues?

I agree there should be a warning in the documentation about dropping events from broadcast streams, I'll add that.

I do think a method which early listens to all the streams, and forwards all events to the returned stream without preserving the order of the iterable of streams would be great:

```dart
Stream union(Iterable<Stream> streams);
```

(One thing I hadn't thought of regarding lazy iteration is that if the iterable is backed by a modifiable collection, then it would mean you could get a ConcurrentModificationError by modifying that collection while the concat stream is being listened to.  Though `forEachAsync` etc. from `quiver.streams` would have the same issue.)