Move exceptions to it's own .py file to start cleaning up code a bit

Also CalledProcessError was redefined, when you follow the code, check_call will raise subprocess.CalledProcessError (an exception with the exact same name) so I changed it to catch that instead.