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)
The NPEs are not related to restructuring implicit search.  the NPEs are related to lazy references.  `Type` and `SimpleType` (and their associated implicit Json `Reads`/`Writes` have circular dependencies.  Hence the addition of `lazy`.  I'm sure if you invest some time and rearrange things it would be possible to eliminate all but a few `lazy`s.  I guess I got `lazy`.  :-)