Compile analysis

This PR adds support for fairly robust serialization of Compile Analysis results for clients.

Few things to note:

* There is a temporary mechanism for converting `sbt.inc._` into protocol equivalents that will likely be revised.
* Not everything in `sbc.inc.Analysis` is carried-over verbatim.  For instance, fields that throw exceptions because name-hashing is turned off are `Option` fields in the protocol versions.
* At some point a review of what actually should constitute a compile analysis might be in order.  In particular, if folks working on sbt think certain fields are too experimental to be encoded and delivered to clients we should remove/amend those fields.

This is a first step in enabling Play projects to be forked off (they will fork off and use `SbtClient` to communicate back to the parent)
Yeah, had the same squeamish reaction myself.  There's also this: https://github.com/sbt/sbt-remote-control/blob/wip/compile-analysis/commons/protocol/src/main/scala/sbt/protocol/Protocol.scala#L440 - ugh.  I could whip-up an opaque value type called `BinaryHash` with a toArray that gives you back a mutable `Array` (copy) that you can mess-up all you want while leaving the original immutable.