Factor out URL fetching into URLFetchStrategy

- Added FetchStrategy class to Spack
- Isolated pieces that need to be separate from Stage for git/svn/http
- Added URLFetchStrategy for curl-based fetching.
Implement per-version attributes for flexible fetch policies.

- Tests pass with URL fetching and new scheme.
- Lots of refactoring
- Infrastructure is there for arbitrary fetch policies and more attribtues on the version() call.
- Mirrors do not currently work properly, and they get in the way of a proper git fetch
Callpath build works when a tag is fetched from git.
Add test case for git fetching.
add tests for svn fetching.
Fix location.py to use source_path
Add Mercurial fetch strategy and lwm2.
Added test for Mercurial fetching.
Fix for SPACK-39: Concretization was too restrictive.

- concretize_version() now Use satisfies(), not intersection.
- version class updated with better intersection/union commands
- version now 1.6 "contains" 1.6.5
- added test for new version functionality

- remove none_high and none_low classes
  - version module is now self-contained; save for external 2.7
    functools.total_ordering for 2.6 compatibility.
Move tty output commands out of package and into clean command.
Minor bugfix in exception constructor.
Add archive creation capability to fetch strategies.

- fetch strategy needs to know how to create archive of fetched repo
- allows mirrors to be created from git/other VCS fetches.
Add a mirror module that handles new fetch strategies.

- Uses new fetchers to get source
- Add archive() method to fetch strategies to support this.
- Updated mirror command to use new mirror module
Refactor fetch tests to use common mock repo module.
Add test cases for mirroring.
Bug fixes for URLs and mirror fetching.
Consolidate archive_file() implementation into Stage.
Test for URL extrapolation.
Start documenting new features.
Add a dummy depends_on to the boilerplate.