Switch setup.py to setuptools

Add install_requires so that setuptools does smart dependency management, and use a try-except fallback if the user doesn't have setuptools installed.

Use try-except fallback for setuptools/distutils