TAJO-1092: Improve the function system to allow other function implementation types.

See https://issues.apache.org/jira/browse/TAJO-1092.

In the current function system, each function implementation is a single Java class subclassed from org.apache.tajo.catalog.function.Function.

In this approach, there are many rooms for improvement. This approach always uses Datum as input and output values of functions, creating unnecessary objects. It does not likely to exploit given information included query statements; for example, some parameters are constants or variables.
In this issue, I propose the improvement to allow the function system to support other function implementation types. In addition, I propose three function implementation types:

* legacy Java class function provided by the current Tajo
* static method in Java class
* code generation by ASM

Later, we could expand this feature to allow Pig or Hive functions in Tajo.