Fix for issues where equivalent forms of an expression were not accepted.

The problem was that the process of converting an equation to a canonical
form turned out to not be fully order-agnostic if any float denominators
were present. I fixed this by recursively calculating denominators when
needed.

Also broke out "negate" functionality separately - collecting was doing
too much.

Test Plan:
New test cases in test.html

Auditors: alpert