Merge pull request #305 from ColdenCullen/master

Switched dub.fetch() to take an enum FetchOptions instead of 4 bools
Always treat tag descendant commits as build metadata.

This avoids having to constantly perform "dub upgrade --prerelease" when new commits get added to a branch that descends from a tagged pre-release version.
Add a "commit" prefix for descendant versions.
Handle invalid version selections gracefully.

When a selected version of a package doesn't exist anymore (locally any in the registry) for some reason, DUB now falls back to the best match automatically.
Only overwrite dub.selections.json if there are actual changes.
Rename m_selectedVersions -> m_selections.
*Rally* only overwrite dub.selections.json if necessary.
Rebuild packages when dub.json (all packages) or dub.selections.json (root package) changed.
Put BuildSettings into its own module and invoke DMD to determine the actual build platform.

Currently only for DMD, the build platform is now determined by actually invoking the compiler with the proper -mX switches instead of guessing from the compiler run that was used to build DUB.
Add the compiler frontend version to the build hash. Fixes #284.
Remove debug log noise.
Implement a basic "clean" command. Fixes #134.
Create target directory if necessary. Fixes #261.
Fix copying "copyFiles".
Added support for fetching to any location, now need to add support for finding packages in other locations.
Removed logInfo from commandline.
Fixed build bugs on Windows.

* Fixed output dir not being created on build complete.
* Fixed '/' being added to the front of Windows absolute paths.
Fixed bug where Path was used for URL on Windows.
Switched fetch command to use defaultPlacementLocation.
Reverse mkdir fix, as it was already done.