Work around race condition in libnss

This change prevents a segfault in ceph::crypto::init when using NSS and
calling rados_connect from multiple threads simultaneously on different
rados_t objects (and updates the documentation for rados_connect to
reflect the fix).

It's pretty simple, just one static mutex wrapping the
NSS definition of ceph::crypto::init. More details regarding the race
condition are in this[0] commit (and pull request #1424).

To reproduce the race condition in the existing codebase, the below[1]
C program will work (depending on number of cores and probably other
things, the number of threads needed to reliably reproduce varies, but
the more the better - in my environment five is sufficient, with four
cores.

[0]: 377c919088423bafcae92759f8d578438717705c

[1]:

```c

void *init(void *p) {
	int err;
	rados_t cluster;
	err = rados_create(&cluster, NULL);
	if (err < 0) {
		fprintf(stderr, "cannot create cluster handle: %s\n", strerror(-err));
		return NULL;
	}
	err = rados_conf_read_file(cluster, "./ceph.conf");
	if (err < 0) {
		fprintf(stderr, "error reading config file: %s\n", strerror(-err));
		return NULL;
	}
	rados_connect(cluster);
	return NULL;
}

int main() {
	pthread_t ts[NTHREAD];
	int i;
	for (i = 0; i < NTHREAD; i++) {
		pthread_create(&ts[i], NULL, init, NULL);
	}
	for (i = 0; i < NTHREAD; i++) {
		int k;
		void *p = (void*)&k;
		pthread_join(ts[i], p);
	}

	return 0;
}
```

Signed-off-by: Sharif Olorin <sio@tesser.org>
Add unit test for race condition in libnss

This isn't in test/crypto.cc because common_init_finish is called prior
to running any tests. Will not build the test function if Ceph hasn't
been configured with NSS.

Signed-off-by: Sharif Olorin <sio@tesser.org>