Add inflector

This is probably pointless to merge on its own, but will be useful for other things to be built on top of so that's why it's here.