AST based expression representation and operations

Dynamic expression code generation

Contributed by Iaroslav Postovalov.