Proper unification of Problem and JsonErrors.

Updated RequestParameterImplicits to use JsonValidation like JsonFormatters. While request parameters aren't strictly JSON, the error types are more than expressive enough for both and this allows us to abstract common functionality.

Abstracted common parts of RequestParameterImplicits and JsonFormatters to a new trait, JsonValidationCombinators. Added two methods to this trait to turn a JsonValidation into a FutureValidation:

  - problemsToClient creates Problems that send detailed error messages to the client;
  - problemsToServer 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) <- problemsToClient(tuple(
                                      json.mandatory[String]("username"),
                                      json.mandatory[String]("password")
                                    ))
            result               <- sessionActions.create(username, password)
          } yield result).toResponse(externalFormat, log)
      }