Pr/3098

I've fixed up https://github.com/silverstripe/silverstripe-framework/pull/3098, rebased it, squashed the commits, fixed the test cases, and made a few API suggestions.
I guess @willmorgan is right, though I did it like this so that the test was more controlled.

There are features in `CookieJar` that aren't actually dictated by `Cookie_Backend`, so there could well be a well implemented backend that when used could break core tests...