Revisions FutureValidation and Problem to catch Akka-level exceptions and work towards a Try-like model of Problem handling.

 - FutureValidation has had its error type fixed to Problem.

 - Problem now extends Throwable and can be chained off of other Throwables to maintain stack trace information.

 - The combinators on FutureValidation (flatMap, Map, et al) now have recover/recoverWith arms to catch
   Akka-level exceptions such as timeouts.

 - JSON/request parsing yields a separate JsonValidation type. JsonValidations can be merged in an applicative
   style and then converted to Problems to report multiple parse errors at once.

A typical HTTP handler now looks like this (adapted from SessionServices.scala):

    val createSessionService =
      service {
        (req: HttpRequest[Future[JValue]]) =>
          (for {
            json                 <- req.json
            (username, password) <- tuple(
                                      json.mandatory[String]("username"),
                                      json.mandatory[String]("password")
                                    ).toClientProblem.fv
            result               <- sessionActions.create(username, password)
          } yield result).toResponse(externalFormat, log)
      }

Note that there is an idiosyncrasy checking for timeouts. The await() method on FutureValidationW specifically catches TimeoutExceptions and returns them in a Problems.Unknown. However, the await() method in FutureW does not.

We should perhaps consider removing await() from FutureW, to enforce a consistent semantics. Then again, these two are only usually used in tests so (a) perhaps it's not a big deal or (b) perhaps we should remove both of them.