Add optional branch to ModuleID

Allow an Ivy branch to be set on the project's module, as well as on dependencies.
This is a work in progress, which for now adds the `branch: Option[String]` to `ModuleID` while preserving backwards-compatibility, but the plan is to fix up the whole of sbt so that it's aware of branches where relevant.

Other changes planned:
* change the default Ivy patterns to include the `([branch]/)` after the module name
Trying to imagine how this looks on build.sbt:

```scala
libraryDependencies += "foo" % "bar" % "0.1.0" onBranch("trunk")
```

The name `onBranch` sounds a bit like event handler name like `onClick`. The prevalent naming for a `copy` wrapper is either `branch("trunk")` or `withBranch("trunk")`. The actual field name could be changed to something like `branchName`.