Use setuptools to create scripts and find packages

Setuptools provides a convenient way to manage console scripts via entry points and an easier way to register python packages with setup.

Upon installation, `setuptools` will create a wrapper script for each console script in the appropriate place.  The wrapper will take care of calling `sys.exit`, the callable referred to by the entry point is on required to return an appropriate exit code.

This method of managing scripts has the convenient side effect of ensuring the script code is also importable (making it easier for other code to wrap or call).