Allow reading/writing sequences of pages with mixed block types

The current implementation causes problems when a single remote request
gets multiple pages that have different encodings for a given column. This
could happen, for example, if the stream is the result of a union of
subqueries or tables that produce different types of blocks for any given column.

The reason is that the identifier for the block encodings is written once per request
based on the encodings of the first page. This fix changes the wire serialization format
to include the block encodings for each page in the response.
Set context class loader when creating ORC writer

The ORC memory manager ends up loading VersionInfo which loads classes
from the context class loader. The tests now set an empty class loader
to verify that it uses the correct class loader.