Fixed OAuth request body signing

Fixes #2899.

In Scala, it was a regression. In Java, I don't think it was ever
implemented.

I've implemented tests.

The WSRequest API in both Scala/Java needs to be merged into
WSRequestHolder, the only place it's used is by a signer (and the only
implementation is oauth, and it's not likely that there will ever be
another implementation).

So the changes I've made to WSRequest in both Scala and Java both look
like they break things, but they are in fact actually quite benign.

Long term, we should merge WSRequestHolder into WSRequest, and make it
all immutable.