Introduce validation for method arguments

This is just a crazy idea to make adding parameters to methods less annoying (not in terms of adding them, but more so in terms of not having to worry about ordering of parameters in the method signature).

This also allows me to start using `**kwargs` in methods and have something else do the validation for me. Keeps the validation logic outside of each method and allows me to at least do some simple (albeit vastly insufficient) validation of developer input.