Moved distributions to utils/distributions.py

- We had these in different spots with different interfaces.
  This unifies them, and hopefully makes it easier to include
  other distributions if we see fit.
- Distributions have associated unit tests