added optional verify-and-retry for fetch, clone, and quick-clone

added options to better handle unreliable connections and server.

the definition of a catch-22:
:rage: working over a crufty, unreliable VPN connection to overseas TFS
:smile: git-tfs
:confounded: cant initialize git-tfs because even pulling individual changesets frequently fails

solution:
* added `--verify-all` option causing all files pulled from TFS to be verified by size and hash value (available on clone, quick-clone, and fetch).
* added a retry for files that fail the verification with `IWorkspace.ForceGetFile`.
* added `--verify-max-retries` option to limit the retry attempts. if exceeded without success, the processing will continue as if `--verify-all` was not enabled.
* added `--max-changesets` option to fetch so that changeset pulls for old code don't wait for tens/hundreds of thousands of changesets

plumbing:
* added read-only `HashValue` property to `IItem` to expose the TFS server's hash value.
* added `TfsDownloadVerifier` class to handle verification and dispatch necessary retries via delegate.
* update `ITfsWorkspace.Get(int)` to take in a list of expected items along with the snapshot changeset number; since the method won't necessarily be able to discover what items to validate, and the only call location already has the list (not super elegant).
* added `--verify-all` and `--verify-max-retries` options to `Fetch`, inherited by clone and quick clone.
* added `--max-changesets` option to `Fetch`
* added `IGitTfsRemote` and `ITfsHelper` entry points to support the `maxCount` parameter available on `VersionControlServer.QueryHistory`