Changed the expression structure to Boost::Variant based AST

Added new docs, various code optimization and improved redability.