Basic changes to support decimal data type

Change function templates to integrate with new function definition template

Scale and Precision propagation

Cleanup + Propogation of scale and precision completed

Unit tests

Cleanup

Use visitor patter in ExpressionTreeMaterializer for implicit casts

Separate out templates for different cast functions
Cast to Int, BigInt from Decimal

Memory fixes