HoleTypeAnalyser and liftTypes config added, hole method uses parameter index.

* A marker trait FullyUnstaged added, which specifies that all captured variables should be hole.
* A marker trait HoleTypeAnalyser added, which specifies that the captured variables which their type is passed to configuration as liftTypes should be lifted an other captured variables should be substituted by hole.
* HoleTransformation changed to include index of parameter instead of symbolId. So the variables with the same symbolId would have the same parameter index. So in the HoleTransformation we would create a holeTable which is mapping from symbolId to index. When we want to generate `interpret` invokation, the parameters would be ordered by their index to have a correct binding for them.