Add requirements/requirements_for_tests

- We do this on every other python repo and I just got massively cut up about not doing it here because basically #emotions
Add a Setup class to provide some helper functions

- We seem to do quite a lot of reading from other places to describe our package, hopefully these are some sensible methods for generating that setup description
- bounces the requirements to requirements files and then reads from there, keeping our usual pattern
- Reads the version from init, which is where I'd guess we're expecting the version to be
- I've shifted the long description to it's own method within the Setup class, so as to protect its entirely fragile ego (only joking `long_description`, I know you're good.)