Port the :gen_event client API to Elixir

The only difference is that notify is made similar to
GenServer's cast where an unknown atom name does not
trigger an error.
Port GenEvent to Elixir for upcoming extensions
Fix the build
Update docs
Use monitored handlers instead of linked ones
Make Stream.resource/3 more like Stream.transform/2

With this change, we allow the accumulator to be passed
to after_fun once iteration is done.

This, however, introduces a deprecation on the old
format used by Stream.resource/3.
Use the new resource acc on GenEvent.stream/2
Deprecate Collectable.empty and Enum.traverse

The current implementation has three issues:

1. It is slow as we can't reuse the data structure but rather
   build a new one from scratch

2. Due to 1., trees can't be traversed

3. empty/1 is unable to deal with resources
Improve coverage for GenEvent
Implement some of fishcakez feedback
Do not add duplicated handlers
Ensure proper whereis expansion
Fix failures in logger
Document lack of guaranteed on monitored handlers
Update docs
Ensure Logger watcher monitors event manager
Make the mode a property of the sender
Also tag notify messages
Split GenEvent.Stream into its own file
Merge pull request #2695 from elixir-lang/jv-ge

GenEvent++