First version. Has the following features:
- Composition of functions using arithmetic operators, Exp, Log and Power functions.
- Gradient calculation at specified points
- Function evaluation at specified points
- Uses code-contracts for specifying valid parameters and return values