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.
The comments says deprecated since 3.1.1, so the notice should say if you're using 3.1.1 or greater, then warn of that so when 3.2 is out, it'll be gone.

I can't ever remember how the arguments work with the `Deprecation` object, though