Make waiters and refcount signed

There was no case where unsignedness mattered.
Improve error recovery

In the tricky case where we encounter an error while recovering from
another error.
Make tests more thorough

Systematically test the fat mutex cases.
Fix bug in fat_mutex_get_held when returning EPERM

When returning EPERM because a fat mutex was not held, we neglected
to unlock it.