GORA-346 Create shim layer to support multiple hadoop versions

Hi Folks,
OK so this PR rebases this patch against master branch.
The only issues I have are as following

 * ALL new modules within the Hadoop Shims patch are packaged as bundle... is this OK?
 * I do not understand the comment by Henry regarding  "2. Make hadoop shim instance to be final in the Hadoop util." If we can clarify this then I can add to the PR and we can commit.
Thank you
Lewis
Let's make this final to support immutability pattern.