Improve null value handling

The mysql adapter will be improved to avoid setting values for columns where
there is no value provided by the user. The previous implementation treated
persist different from save. With persist, two insert statements were created,
one with values for auto-increment columns in the primary key, and one without.
With save, one insert statement was created at initialization time, but if any
columns were missing at the time the SQL command was sent, a new SQL statement
was created, leaving out the columns that were null.

During metadata processing, default values were obtained and saved for cases
where the user did not provide values. This worked well for primitive column types
but was problematic for complex column types such as time and date types.

This change makes both persist and save work in the same way. When the object
is presented to persist or save, the values are analyzed to see if any are null.
If any values are null, a different insert statement is used. If the appropriate
insert statement has already been created, it is used. If not, an insert statement
is created and cached for future use.

The implementation modifies DBTableHandler and in MySQLConnection.

DBTableHandler:
  Add a parameter to getFields and getField to record whether there are any null values.
  For each value, call a function supplied by the user, either setDefined or
  setUndefined. 

MySQLConnection:
  Create a function to track defined and undefined column values. This function
    constructs a key e.g. 'DUUUD' where each character corresponds to the value
    of the fields bend Defined or Undefined. 
  Use the fieldValueDefinedKey to create INSERT and INSERT... DUPLICATE SQL
    statements. The statements with all column values defined are created at
    initialization. Other statements are created on demand.
  Modify buildInsertOperation and buildWriteOperation to use the new undefined
    column protocol.
Improve read-write diagnostics
AsyncNdbContext:
  Add call to handleErrors() after tx execute is completed
  Add NDB_MAGIC_TICKET assert, which should verify 1-to-1 correspondence 
   of push() to pop().
  Add debugging messages.
Map SQL Date to JS String in test case and in NDB converter
merge
Move MySQLTime.js into Adapter/impl/common
Move UserContext.js into Adapter/api/
Fix pathnames after UserContext.js move
NdbTransaction::close() should run as an async call
and be queued on the session's execQueue
Some cleanup of SPI docs.
minor formatting / debug message
Use class_id in wrapped destructor call
Wrapper type checking
Add checking that all C++ types wrapped as JavaScript values are unwrapped back to the original type.
Fix inconsistency (const vs. non-const) in Record wrapping
Fix wrap/unwrap inconsistencies
better naming
Serialize all Ndb destructor calls
More debugging info for fetchResults() calls
Fix terrible bug using NativeDestructorCall<T> with wrong type.
Enable Multiwait by default
Detect NdbWaitGroup v1 or v2 based on NDB version number