Various cleanups to zctx

* Asserts that zocket isn't null when destroying it; the tolerance for
  null sockets is a bogus workaround against corruption of zctx from
  unprotected use in multiple threads.

* Renamed 'main' to 'shadow' to make more explicit (negative property
  names are not good).

* Renamed 'socketsMutex' to 'mutex' since (a) camelCase breaks our style
  guidelines, and (b) we have one mutex to protect the object, there is
  no value in qualifying the name.

* Cleaned up constructors, the code was messy.

* All methods that modify or read zctx properties needed to be protected
  by the mutex, otherwise we'll get random outcomes.

* I still do not like the multithreaded zctx; it is incompatible with the
  current code in zthreads (e.g. we don't need shadow contexts) and is
  not sufficiently tested IMO. Also, I still don't see a valid use case
  for it.