Refactoring - Define function holder and registry interfaces

This change is needed in order to pull out Hive storage/function source code out of
'exec/java-exec' moudle into 'contrib/storage-hive' module. Currently 'exec/java-exec'
depends on 'contrib/storage-hive' (which currently just builds a shaded hive-exec jar).
Ideally 'contrib/storage-hive' should contain the Hive storage/function source code so
that there is a clear separation between core execution engine and Hive storage engine
code.

Note: Interfaces defined for function holder and pluggable function registry are not
perfect and need more discussion to standardize these interfaces.