New features for parsing multiple JSON/request fields at the same time and converting them to Problems

Added new validation types:

 - type ProblemValidation[T] = Validation[Problem, T]
 - type JsonValidation[T] = Validation[JsonErrors, T]

All JSON/request parameter readers and writers now deal in JsonValidations. These can be combined using JsonFormatters.tuple into a single validation with combined errors. The single JsonValidation can then be converted to a ProblemValidation using one of two type class methods:

  - toClientProblem creates Problems that send detailed error messages to the client;
  - toServerProblem creates Problems that serialize to the log and send to the client "An unknown error has occurred".

These methods are implemented in terms of two new extractors, Problems.{ClientValidation, ServerValidation}, which have replaced Problems.{Malformed, Missing}.

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)
      }