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.
Should this be `Injector::inst()->create('Cookie', 'cookie_backend'));` (same for the `$cookies` variable above)?
Since `TestSession` has been changed to use the Injector, I'd expect this would change as well?