Implement flag to clean unused dependencies

This addresses issues #2569
https://github.com/elixir-lang/elixir/issues/2569
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
Using autocomplete for function discovery

I had to go to the mailing list to discover this trick. Knowing it's autocomplete supplying the information makes it obvious in hindsight, but I had it in my head that it would be part of the h() command. It might also be worth adding a mention of autocomplete to the h(IEx) page, as well, but since this is likely first help page a new user would come across, this may be enough.
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
Merge pull request #2686 from billgathen/patch-1

Docs: Using autocomplete for function discovery in IEx
Properly handle compilation errors in Erlang compiler
Merge pull request #2684 from alco/mix-compile-erlang

Properly handle compilation errors in Erlang compiler
Only add :elixir application for Elixir projects in compile.app task
Do not pre-compile a project if an alias was found

Closes #2689
Support building Erlang-based escripts in mix escript.build
fix doc typo in Macro.expand/2
Merge pull request #2691 from herenowcoder/patch-1

fix doc typo in Macro.expand/2
Improve coverage for GenEvent
Implement some of fishcakez feedback