[WIP] Compare Symbol memory addresses

Before:
```
$ ./expand2
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1218ms
number of terms: 6272
```
After:
```
$ ./expand2
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1204ms
number of terms: 6272
```
So it seems to provide about 1.15% speedup.

Note: This is rebase of #91, and it also uses my own local branch now.