Ability to use Expression object in different threads.

Hi,

I modified the design to use the same Expression object in different threads. The core algorithm is same but the design is changed. Please review my code and let me know if there is anything that I need to change.

I am having a use-case where in I need to calculate a metric value from a expression with different(say 100) sets  of variables. My plan to achieve that is to build a single Expression object and to create different instances of it with different sets of variables and evaluate. 

Major changes : 
#1 The old flow stays same but one needs to use eval method on instance.
#2 Separated the default operators and functions into a single context object rather than building it for every expression object.
#3  Made Expression Threadsafe by Moving all mutable instance variables in Expression to ExpressionInstance and EvaluationContext. 

Note: My Code is auto-formatted as per Java standards using eclipse. If you are following a different method to format your code, please share that with me. I will reformat my code.

Thank you.