nsqd: ensure all Notify() goroutines have completed prior to shutdown and prevent possible atomic_rename panics in Windows test suite

* channel and topic changes now call nsqd.Notify() syncrhonously, and nsqd is responsible for spawning goroutines that will be tracked in its waitGroup for completion prior to exit.
* nsqd's PersistMetadata uses a random temp filename to reduce the risk of concurrent tests stepping on each other
Merge pull request #493 from allgeek/windows_atomic_rename_panic_491

nsqd: ensure all Notify() goroutines have completed prior to shutdown