Refactor most of the code to use classes

OK, this is a big one.

Basically, I refactored the whole thing based on what I did a few days ago with [microscope](https://github.com/mirego/microscope/pull/7). Instead of having a big class with a few type-based methods in it, I decided it was best to use classes that have a single responsability: inject type-based validations into a model.

Most of the other modified files are either renames or bigger files (likes tests) that I split up in multiple files.

Have a blast! :smile: