Allow per-thread state with init and teardown methods.

This is chiefly added for the MCS locks to avoid the need to call
vmalloc() on the critical path to locking, by shifting the allocation of
the node which must be passed in to the individual thread, who can hence keep
that struct mcs_spinlock node local (in cache memory) for the duration of
the test.

Threads must now call a threadsetup() and threadteardown() function at
the start and end of their run on a particular test, respectively,
taking care to store the opaque pointer which is returned, and pass this
pointer to each of the locking and unlocking functions to satisfy the
interface. It is quite in order for this pointer to be NULL for "simple"
locks where there is no need to maintain per-thread state; indeed, this
is precisely how the other tests which pre-date the MCS spinlocks test
are implemented ("return NULL" and then passing a NULL pointer around,
which just gets ignored).
Merge branch 'mcs'