Datalog: expressions in IDB head

1. previously `A(a+b) :- R(a,b)` would fail spuriously
2. changed grammar/model to allow for this syntax

Additional changes:
3. updated datalog model to create Apply instead of Project in all cases
4. updated clang & grappalang to use these more expressive Applys
5. changed boolean expression compilation to general expression compilation. This is to accommodate Apply expressions. Other than clang/grappa, this should only have been a name refactor in pseudocodelang and pythonlang.

Notes:
Out of laziness (or minimal-ness), I've only allowed the head to contain variables, aggregates, binary ops of variables, or binary op of variable and aggregate (see datalog/grammar.py). When needed, this should be extended to more general expressions