Pull warning / deprecation support from core

First step to moving things into this gem for me is to move the deprecation /
warning stuff across, as part of this Im also pulling across the helpers we
use on core, with the idea of all gems using those helpers to assert on warnings
and all gems using this gem to emit warnings / deprecations.

This will need some finessing me thinks so... go!

/cc @myronmarston @xaviershay @soulcutter @samphippen