replace `async-shell-command' with `define-compilation-mode'

* introduce a `elixir-mix-compilation-mode' with `define-compilation-mode'
* much cleaner `elixir-mix-execute' function. Remove limitations
  about which tasks could be run through it.
* introduce `elixir-mix--build-runner-cmdlist' function to handle
  different parameter situations.