This further simplifies the code.
It also removes a branch from the mutex lookup code,
at the code of adding bounds checks to the static mutex lookups.
We can concoct any scheme we like for mapping
between uintptrs and mutexes.
Instead of using unsafe to map between actual pointers and uintptrs,
use a simple numbering scheme. Zero means nil. The next 12 ints
correspond to sqlite's 12 built-in mutexes. Everything after that
is an index into the mutex pool, appropriately shifted by 12.
This makes vet happy and makes the pointer checker happy.
It adds instructions and branches to the mutex acquisition path,
which is definitely unfortunate. In exchange, though,
we get simplicity, safety, and easy to reason about mutex "pointers".