Yeah, I'm sure this isn't the best way to do things. The `variableString` for `Term(5, "xy")` will be `x1y1`, so say I have an expression 5xy + 3xy + 2x, I create a hash of variables and then loop through the terms.

`variables` will first equal `{'x1y1': 5}`, then in the next term, since`x1y1` is already in the hash, it will become `{'x1y1': 8}`. With the next term it will become `{'x1y1': 8, 'x1': 2}`. It can then uses this to generate the relevant terms. This is also the only time I use `variableString` as I need a way to hash the variable without the coefficient.