Avoid null deref for null watchers in ProcessWatcher
Fix serverAddrs randomization; avoid probs with IPV6 addresses

Linq's *.OrderBy(...) does not order in-place, so the serverAddrs
collection was not actually being randomized.

Also, ran into issues with Dns.GetHostEntry(...) returning IPV6 variants
of localhost which were then being considered invalid during connect
attempts.  Preemptively filtering these out in the
ResolveHostToIpAddresses(..) helper method.
InterProcessLock + Mutex based on apache curator implementation

A port of apache curator's InterProcessLock / Mutex classes with the
minimal amount of helper code.