Abstract validation logic into separate gem

/cc @arfon, @johndbritton
Shedding a tear for programmatic access to a gem's version :cry: