[DWRF] Support getRecordWriter with null FileSystem

Summary: RC file and Sequence file both ignore the FileSystem parameter passed to the getRecordWriter method.  To make ORC more compatible with these old formats, check if the FileSystem parameter is null, and if so, use the RC file method of initializing it.

Test Plan:
Added a test case for it.

Ran ptests.
[DWRF] Support key access/size for null maps

Summary: There are a couple of methods in OrcLazyMapObjectInspector that don't handle nulls gracefully.  Added null checks to them and handle nulls in the same way that RC/Sequence file do.

Test Plan:
Added testcase which demonstrates the NPE.

Also added tests for other complex types, they all fully support nulls.
[DWRF] Accessing out of bounds index of list should return null

Summary: This is to be feature compatible with RC/Sequence file.  If you access an index < 0 or >= the size of the list, it should return null, not throw IndexOutOfBounds.

Test Plan:
Added a test case.

Also added a test case for accessing keys of maps that don't exist.

Running ptests.
[DWRF] Materialize in the OrcLazyObject copy constructor

Summary:
We should call materialize in the OrcLazyObject copy constructor to prevent the copy and the original from both having materialize being called on them and both advancing the tree reader, also this prevents the copy from calling materialize out of order.  Added a comment to this effect in the code.

Also added a null check to all the copy constructors for classes which extend OrcLazyObject.  Previously, if materialize wasn't called previous would be null and this would cause an NPE.  Still, if the value of the first row is null, this could still be null, so we should check for it.

Test Plan:
Added unit tests.

Running ptests.
[DWRF] Handle nulls in non-lazy object inspectors

Summary: Made these fixes for the lazy object inspectors, but forgot about the non-lazy ones.

Test Plan:
Added tests.

Running ptests