A probability monad with custom __ifThenElse and __match.

- Implemented in terms of an underlying list.
- The "plus" of the monad seems only sensible when cases are disjoint. Do we want to fix this?
- Normalization is done when "showing" result. This seems easier to reason about?