CanLoadSimpleProject: log all value changes from "compile"

This makes it easier to debug.
Make BuildValue covariant and require only a Writes not a Format
Add custom exceptions and CompileFailedException to TaskFailure

This involved several yak shaves:

 * we have to parameterize ValueChanged and TaskResult with both a
   result type and an exception type, so we can have a BuildValue
   for the exception
 * we need to be able to look up dynamic serializations by plain
   class instead of manifest, because we don't have the manifest
   for the exception types
 * we need to be able to serialize any Throwable in some kind of
   fallback way, but prefer registered serializers for specific
   kinds of throwable when available
Merge pull request #196 from sbt/wip/havocp-failed-task-results

Custom serializers for exceptions thrown by tasks
ScalaCheck-based Protocol tests

* Added ScalaCheck and associated protocol generators to the project.
* Ensured that all non-trivial protocol tests pass.
* Fixed a bunch of bugs
* Documented need for lazy values