Refactored monos, added many features to posys

 - Created a template 'nomials' class for shared features
 - added 'eid' attribute to monomials (it's basically a hash of 'exp')
 - added algebraic simplification to both monomials and posynomials
 - added posynomial-posynomial multiplication
Or I guess I meant: should we consider implementing Monomial.__eq__ as:

```
def __eq__(self, m):
    return isinstance(m, self.__class__) and m.c == self.c and m.eid == self.eid
```
?