Proposal - Add haskell-process-wrapper-function

Hello,

Following this [PR](https://github.com/haskell/haskell-mode/pull/350) and [its possible improvment](https://github.com/haskell/haskell-mode/pull/350#issuecomment-59434038), I added the `haskell-process-wrapper`.

This permits to launch the `haskell-process-type` command (inside `haskell-process-start` function)  inside a wrapper command (`nix-shell` for example, or others).

For example, using this:

```elisp
(custom-set-variables '(haskell-process-wrapper '("nix-shell" "default.nix" "--command"))
                      '(haskell-process-type 'cabal-repl)))
```

For this example, this triggers the `cabal repl` command inside `nix-shell` (defined within the [default.nix](https://github.com/ardumont/haskell-lab/blob/master/haskell-lab.nix) expression).

I tested manually - https://github.com/ardumont/haskell-mode/commit/3f6e21d4eecaa39faa4053b2df6bbe31013e4087 with:
- `haskell-process-wrapper` (for nix-shell as above) with `haskell-process-type` in `(cabal-repl cabal-ghci ghci)`.
- `haskell-process-wrapper` nil (the default) and `haskell-process-type`
in `(cabal-repl cabal-ghci ghci)`.

The code is generic, so this should work for the other commands that @chrisdone mentioned.

*Note*
I added unit tests (to enforce that I did not break anything) and I needed mocks (I added the deps inside the `haskell-process-tests.el` file but this must not be what you want. 
If you have any suggestions on how to improve this, I'm all for it.