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 may not be
complete and need more discussion to standardize these interfaces.
Code reorg - move hive storage code out of 'exec/java-exec' into 'contrib/storage-hive' module.