Added setup.py, mutable/immutable variables

Also added parameter to "direction" decorator to allow expected thrown exception