Added class for Lisp tokens

This is to be used by the writer and reader implementations.
Correct path for dependency files in Makefile
Typedef for shared pointers to statements
PredicateLambdas are expressions

We might need that for predicate logic rules
Use theories instead of variable lists in rules

We might want to use non-variable parameters some time.
Declare destructors virtual for base classes

Visitors are not meant to be deleted through a pointer, hence made its
destructor protected.
Nodes know their type, we can use static casts
Return end() iterator if we can't find a node

We should also return a constant iterator there.