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 hadn't intended on changing the API for the `Cookie` accessor class; instead I'd have left devs to actually access the service object if they needed to do any advanced Cookie manipulation or work.

Not that I'm opposed to changing the API, I just thought it'd be of less impact. Just a thought, no need to undo this.