Launcher to retrieve dynamic app versions correctly

Currently, if in a launcher specification you use a dynamic ivy revision for the version, Ivy will comply, but that exact same text propagates into the `AppProvider` that the app sees, hence the app won't know what version of itself was actually retrieved.
In sbt, for a version such as `0.13.+`, this leads to sbtBinaryVersion becoming `0.13.+` (taken directly from `AppProvider.id()`), as well as the artifacts being retrieved to an incorrect boot directory: `~/.sbt/boot/scala-2.10.3/org.scala-sbt/sbt/0.13.+`. 

This pull request fixes that by looking at Ivy's ResolveReport upon resolving the app, figuring out the resolved version, and using that for:
* the destination artifact pattern (download location) for when `Update.retrieve` downloads the artifacts
* the `ApplicationID` referenced in the `AppProvider`, which will mention the resolved version

This way, sbt and (I believe) other apps too will be able to have dynamic versions specified in their launcher config, and still be presented with correct information upon launch.