Change to DataAction to work around something annoying inside Play

Action takes a Request[A] => Result
EssentialAction takes a RequestHeader => Iteratee

However, it is not simple to have an Action that internally may use an EssentialAction
Nor is it simple to get a Request[AnyContent] if you have a Request[A]

This made it really rather painful to have a DataAction that contains a JSON block, but that will instead use a different EssentialAction if the Accepts header isn't asking for JSON, or if the call fails.

This commit rewrites everything in terms of EssentialAction, and also turns DataAction into a case class (to work around a second issue with when Scala will and won't infer the type of an argument from an available implicit argument)