Add hints and general tidy-up

Pretty much done, just need to re-test in Linux/ Python 2.