Replace the 'unpack' command with a more general 'get'.

This is @jmillikin's `cabal fork` implementation (#2) with the UI changes requested by @dcoutts.

The first patch contains John's original implementation of `cabal fork`. The only differences are cosmetic:  UI commands `fork` and `unpack` are merged (this is the new `cabal get` command), and the code for forking and unpacking is moved to a single module (`Distribution.Client.Get`).

The second patch removes duplication between the functions `fork` and `unpack`.

The third patch adds support for the repo kind argument to `--source-repository` (`cabal get --source-repository=this PACKAGENAME` now works).