Remove global mutable serializer registry

This is the logical extension of earlier work to always pass the
Writes around (and to pass only Writes, not the whole Format).

With those earlier cleanups it isn't such a big deal to pass
the serialization registry around where it's needed too.
Merge remote-tracking branch 'origin/master' into wip/havocp-remove-serialization-registry

Conflicts:
	client/src/main/scala/com/typesafe/sbtrc/client/SimpleClient.scala
	commons/protocol/src/main/scala/sbt/protocol/WireProtocol.scala
	commons/protocol/src/test/scala/ProtocolTest.scala

This merge includes the SbtClient/SbtChannel split, and is broken because
we don't yet pass the serializations from SbtClient to SbtChannel.
However in this merge it compiles though doesn't work correctly.
Make SbtClient require serializations in the constructor

Otherwise there is a race where the serializations might not
be added before the event we need to deserialize.

If we need more serializations on the fly, a possible API
would be to allow providing a deserializer to watch().
We could use that deserializer to rewrite events from
ValueChanged[JsValue] to ValueChanged[T] when invoking the
watch() handler. But not in this commit for now.
Simplify the DynamicSerialization types

Since SbtClient no longer needs a mutable one, just use
DynamicSerialization as the only public type, and implement
the trait with a private final case class.
Merge remote-tracking branch 'origin/master' into wip/havocp-remove-serialization-registry

Conflicts:
	server/src/main/scala/sbt/server/UIShim.scala
Merge pull request #185 from sbt/wip/havocp-remove-serialization-registry

Remove global mutable serializer registry
Update some dependencies.
Clean up some of the JSON parsing code.

This commit makes some of the play-json parsing code a bit more idiomatic.
Mainly, this removes the usage of JsValue.as[T], which will throw exceptions
at runtime in unexpected ways, instead of bubbling up the JSON parsing error using
a JsResult.
Improve data contained in TestEvent messages.

This adds a duration field to the TestEvent message, and also improves
slightly on the way test names are reported. Previously, the qualified class
name for each test was reported, but not the actual name of the test itself.
Some more cleanup, and possibly slightly better test logging.

This commit cleans up the JSON code a bit more, most notably removing
the use of Symbol identifiers.

Additionally, I've attempted to enhance the test reporting bits - there's now
new TaskEvents that model the groupStarted and groupFinished methods in TestListener.
These events will have the same task ID as TestEvents for each individual test, so
it's a good first pass at associating events to suites. Unfortunately, this doesn't
work perfectly with all of the test backends. Notably, the SBT reporter in Specs2 doesn't
send over a meaningful Selector with events - by default, it just sends over a selector for
the whole suite, which means there's really no way to associate a meaningful name for
test events produced by Specs2. This is a defect in Specs itself, so there's not much
to be done. It looks like the JUnit and ScalaTest reporters do the right thing with
selectors (and durations), and ScalaCheck is moderately acceptable as well.