Fix async callback handling.

Inner Logic of executeQueryCommand result looks as:

self.db._executeQueryCommand(a, b, function(err, result) {
  // ...
  try {
	  // ...
    callback(null, value);
	  // ...
  } catch (e) {
    // ...
    callback(err);
    // ...
  }
});

It means that eventual error thrown within callback will be propagated back to same callback.

This commit fixes that, so it logic is:

self.db._executeQueryCommand(a, b, function(err, result) {
  var cbValue;
  // ...
  try {
	  // ...
    cbValue = value;
	  // ...
  } catch (e) {
    // ...
    callback(err);
    // ...
  }
  if (cbValue) callback(null, cbValue);
});

Callback is not called with it's own error, and that one is freely thrown.
Added breaking test #893
Merge remote-tracking branch 'medikoo/fix-async-callback-handling'