Improve IUD performance by using direct buffers

All IUD operations except the Bulk load operations now use direct buffers.
There is a
  - Direct buffer for multiple rowIDs
  - Direct buffer for one or more rows containing the column names and
    column valueis

Format for RowID direct buffer
numRowIds + rowId + rowId + …
rowId len is passed as a parameter to Java functions

Format for Row direct buffer
numCols
            __
colNameLen    |
colName       |   For each non-null column value
colValueLen   |
colValue   __ |

The colValue will have one byte null indicator 0 or -1 if column is nullable

The numRowIds, numCols, colNameLen and colValueLen are byte swapped because
Java always use BIG_ENDIAN format. But, the column value need not be byte
swapped because column value is always interpreted in the JNI side.

These direct buffers are wrapped as ByteBuffer and parsed in the java functions
to do the corresponding Hbase operations. Using direct buffers avoids the
following

  - Creating temporary Mutation objects
  - Creating RowToInsert java objects from these Mutation objects
  - Transitioning from JNI to java call to add columns to RowToInsert object
  - Iterating through the columns objects to do put on the java side.

Fix for seabase/TEST022 with the merged version. Rowwise format has been
changed recently and corresponding change is done in direct row buffer.

Multiple row delete was not part of transaction earlier because RMInterface
wasn't exposing a API to do delete using List. In patchset 1, multiple
deletes was converted into delete a single row iteratively using transaction.
In patchset 2, RMInterface is changed to support multiple row delete and hence
Trafodion HbaseClient uses this new interface to do multiple row delete with
transaction.

Change-Id: I1617b4236a823040ec3dfefbc66508f3f01868fc
Merge "Improve IUD performance by using direct buffers"