Versioning catalog items (take 2)

Leaving here for early feedback.


Supercedes #92 
@aledsage wanted this, i was being too lazy, returning `String[]` in places.  glad you've done it.  could be public i think.

you will have merge conflicts since #307 unfortunately.  hopefully easy.