Fix to write struct with empty fields and read ver 4 sparse double matrix

* src/mat5.c (WriteCellArrayField): Using matvar internal num_fields
  to set the variable nfields when writing a MAT_C_STRUCT

* src/mat4.c (Read4): Added support to read sparse matrix of double
  and complex data

* src/mat4.c (Mat_VarReadNextInfo4): Check if data is complex when
  reading info for a sparse matrix

* src/mat5.c (GetStructFieldBufSize): Added switch case to handle that
  character data of data_type MAT_T_UINT8 are written as MAT_T_UINT16

* src/mat5.c (WriteCompressedCellArrayField): Using matvar internal
  num_fields to set the variable nfields when writing a MAT_C_STRUCT.
  Using matvar internal fieldnames instead of field name.