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)
My thought here was to make it entirely separate from this serializer, i.e. we have registeredFormats as we did before, and then registeredProtocolConverters. When we want to send a build value we would look up a protocol converter, apply it if any, and then serialize the result.