Quadratic macros, take 2

Changed the code a bit, and now I'm only seeing a regression on ``test/perf/speed.jl`` of about 5%. I'm a bit hazy as to whether this is actually type stable or not: the return type for ``addToExpression`` is deterministic for a given method signature, but not across the function as a whole. Should probably do a bit more thorough job benchmarking.