Work towards catching Akka-level exceptions within FutureValidation. This is step 1 of 3.

 1. Fix FutureValidation so the error type is always Problem
 2. Rewrite Problem to be based on top of Throwable
 3. Add recover and recoverWith branches to FutureValidation.{flatMap, Map, et al}
Part-way through step 2 (basing Problem on Throwable): project core compiles.
Refactor step 2 of 3: all code compiles and all tests pass.

I've made minor changes to a couple of predefined problem types.
All login endpoints now return one of: Problems.Authentication(username)
or Problems.Authorization(username, operation).
Refactor step 3 of 3. Added recover and recoverWith clauses to FutureValidation.

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.
Made Problem mutable to prevent recreation of stack trace information on copy.