[WIP] Cache the ordered dict_ in Add

This would seem like the right improvement, but it actually gets things slower.
Before:
```
$ ./expand2
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1518ms
```
After:
```
$ ./expand2 
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1548ms
number of terms: 6272
```
Not sure why.

This is just #68, using my own branch.