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)
Well, it's there to make stuff like this possible:
https://github.com/sbt/sbt-remote-control/blob/wip/compile-analysis/commons/protocol/src/main/scala/sbt/protocol/DynamicSerialization.scala#L171
https://github.com/sbt/sbt-remote-control/blob/wip/compile-analysis/server/src/main/scala/sbt/server/Serializations.scala#L47

Doesn't seem wrong, per-se.  Will remove it.