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)
Any objection to using ScalaCheck?  I do like writing property-based tests if possible.