Simplify expression arguments

The previous release experimented with using a set data type to
automatically reduce expressions like a * b + a * b to just a * b.

There are two reasons to get rid of this by default:
1. It limits the ability to represent unsimplified expressions.
2. It adds some unnecessary computational overhead.
Add flatten=False/True argument to to_dnf/to_cnf

For some expressions, flattening is extremely expensive.
This way, if you set flatten=False, you can attempt to construct a
DNF/CNF by iterating through the expression's zeros and ones.