lift mapM and flatMapM from Iteratee into BodyParser

The existing map and flatMap methods on BodyParser already lift the
underlying Iteratee methods into BodyParser. This commit does the same
for the mapM and flatMapM methods, and for completeness-sake, it also
lifts the validate method to validateM. These combinators allows one
to write code that asynchronously processes the results of body
parsers, without having to touch the underlying Iteratee
implementation.

All `BodyParser` methods (`map`, `mapM`, `flatMap`, `flatMapM`,
`validate`, and `validateM`) should take an implicit parameter for the
execution context, rather than using Play’s internal execution
context. Furthermore, these execution contexts must be carefully
prepared with the `prepare` method, to ensure any user context is
captured. The tests in `play.it.http.parsing.BodyParserSpec` use the
`ExecutionSpecification` trait, following the example of
`play.api.libs.iteratee.IterateesSpec`, to test the use of execution
contexts. This API change required a few minor fixes:
`play.core.j.JavaParsers` and
`play.it.http.parsing.JsonBodyParserSpec`.

Add property-based tests for BodyParser methods. Test the
functor(-like) and monad(-like) laws for map, mapM, flatMap, flatMapM,
validate, validateM. Use org.scalacheck.Gen.oneOf to provide arbitrary
SimpleResults, and test the two cases for returning a SimpleResult
with validate and validateM

The `run` helper applies body parsers in another thread, thus ensuring
that the execution context was prepared when the body parser was
constructed, not just when it is run!