EventStream.takeWhile implemented

Also fixed bug where if onDistribute returns Event.noMore when the
current Event was not an Event.End, it would submit the last Event
instead of an Event.End to any subscribers.

Fixed a bug where an EventStream could unsubscribe itself while an
Event was being pushed to all the child EventStreams, thus causing a
ConcurrentModificationException to get thrown from the iterator.