Make MySQLConnection defensively thread-safe

Use the same approach as in PostgreSQLConnection, where queryPromise is an
AtomicReference.  Previously it would check queryPromise.isComplete.  However,
there was no way that a non-null promise could be complete as the only two
places it was completed (in {succeed,fail}QueryPromise) immediately set it to
null beforehand.  This should be reviewed/tested.

Updated clearQueryPromise in both to return the old promise, in order to avoid
racing completions.