[WIP] Implement type code by hand

Before:
```
$ ./expand2
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1497ms
number of terms: 6272
```
After:
```
$ ./expand2 
Expanding: ((y + x + z + w)^15 + w)*(y + x + z + w)^15
1479ms
number of terms: 6272
```

Adding the new member variables slows down things considerably. The actual change in `is_a<>()` is quite a bit faster, and overall it seems a little bit faster. But given the complexity of the change, the speedup is not great. I tested with gcc 4.6.3.

TODO:

* [ ] test newer gcc
* [ ] test clang