Compile analysis take two

@corruptmemory , apologies for all the churn; I talked to @jsuereth about some issues and just wanted to get this done today while you were out. Once I started to mess with it it was easier to break it up than mess with the whole thing at once. I tried to keep your github creds on the big commits.

This PR includes https://github.com/sbt/sbt-remote-control/pull/194 so feel free to review https://github.com/sbt/sbt-remote-control/pull/194 separately and then review this one.

I don't have scalacheck stuff in here, just to keep it separate. It should be layered in next. I think I found a working way to remove a lot of the additions to DynamicSerialization, the lazy vals, and the Implicit prioritization, so that keeps the patch smaller.

Other than those items, I think either this plus the earlier PRs today incorporate the stuff from https://github.com/sbt/sbt-remote-control/pull/190

From here we could strip out some of the stuff we want to keep private, and there are also several TODO in this patch, but I believe this is a working checkpoint that should be easier for @jsuereth and/or @gkossakowski to get a handle on as we evolve it.

In the case of `err.getMessage` being `null` `${err.getClass.getName}` is always going to be `Incomplete`
https://github.com/sbt/sbt/blob/0.13/tasks/src/main/scala/sbt/Result.scala#L13
I would suggest just serializing all of `err`.  It was useful when I discovered this problem