[impl] start of 'simplify' mission
[impl] add Expression concept
add Expr.fmt and conditional sign
[refac] remove irrelevant member methods (runtime should and will raise when these are called)
[refac] change fmt into abs_fmt to get rid of sign (will be added later using the 'negative' method)
[impl] add 'structure' patterns to use for matching rules
[impl] add "product" concept
[impl] add distributivity
[impl] basic simplify for each class
[refac] get rid of Term
[refac] remove unneeded Pattern
[fix] use type(t) is X
[fix] check type before comparison
[fix] return self, not [self]
[impl] add __repr__
[fix] check for self-identify in __eq__
[fix] expand generator before giving as argument
[fix] use operator.add iso `sum`
[refac] extract methods + rename 'term' to 'factor'
[refac] extract local var