Bug fixes and improvements for deps handling

Allow deps to specify a `force_version` option to indicate that subsequent deps specifications for the same application should be ignored. 

This option would be especially useful in code review situations involving changes to several nested dependencies in order to maximize efficiency for the reviewer. Instead of having to fight with rebar to modify different levels of rebar config files and get something that builds in order to test, the author of the change can provide a top-level rebar config file that lets the reviewer focus on the changes and not cause undue frustration. 

Another useful case is testing a new version of a library where you know that you want all dependencies that require the application to use that new version. *e.g.* Recently we attempted to test the `2.0.0` version of `lager` with `riak_cs` and ran into version conflict problems that this option would have been ideally suited to address.

This change set also resolves a few bugs dealing with vcs version determination and does some refactoring of enormous functions to at least be slightly smaller.

Finally, there is also a commit to remove some broken functions dealing with expanding the release version. 

I have created a gist [here](https://gist.github.com/kellymclaughlin/1862c01dd9e98e9a6a81) that illustrates a particular headache we have faced numerous times and how the `force_version` option and a modified version of rebar can be used to easily overcome the issue.