static deserialize(obj) {
    if (!obj) {
      throw createInvalidArgumentTypeError('Expected value', obj);
    }

    obj = Object.assign(Object.create(null), obj);

    if (obj.data) {
      Object.keys(obj.data).forEach(key => {
        SerializableEvent._deserializeObject(obj.data, key);
      });
    }

    if (obj.error) {
      obj.error = SerializableEvent._deserializeError(obj.error);
    }

    return obj;
  }
Deserialize value returned from a worker into something more useful.
Does not return the same object.
@todo do this in a loop instead of with recursion (if necessary)
@param {SerializedEvent} obj - Object returned from worker
@returns {SerializedEvent} Deserialized result