refact(*): Generic expr and expr_cell

The updated DS is as follows:

expr is the base object containing a pointer to expr_cell. When
generating the parsed tree, bison builds it with expr objects as nodes.

Other base classes extends expr_cell. Thus when defining new types, we
can just inherit expr_cell.

Since formulas return a boolean value and terms return a double. We
have two functions .val() -> double and .eval() -> bool for all expr
objects. When calling the wrong one, an error message is printed, and
value defaults to (0 or false).