Rewrite elixir_macros.erl in Elixir

This branch moves most of the macros implemented in erlang to elixir.

The exceptions are `case/2`, `try/2` and `receive/1` that cannot be written
in Elixir and therefore were converted to special forms.

On the plus side, `var!/1`, `var!/2` and `alias!/1` were converted to regular
macros (and demoted from special forms).

This also simplifies dispatching, as we no longer need to special case
some of the Kernel macros.