Implement pluggable discovery adapters and standalone tests

This pull request adds a `Locator` interface for server discovery, extracts the etcd discovery implementation into an `EtcdLocator`, and adds a `StaticLocator` adapter. The config loading mechanism has also been refactored, making it possible to run the tests without etcd, memcached, or a standalone Simple Push server.

* The router now uses a buffered channel (`bucket_size`) instead of partitioning contacts into buckets.
* The etcd key prefix and minimum refresh interval are exposed as `EtcdLocatorConf.Dir` and `.RefreshInterval`, respectively.
* `EtcdLocator` now uses the normalized key (prefix + hostname) consistently, and accounts for non-default HTTPS ports when constructing the key.
* The `PluginLoaders` map associates plugin types (i.e., logger, proprietary pinger, metrics, storage adapter, router, locator, server, and handlers) with initialization functions. This is used by `TestServer` to specify configuration options programmatically. The `*Conf` structures have also been flattened where appropriate.
* The `Host` and `Port` options have been consolidated into `Addr`. If `Addr` is omitted, the server and router will listen on random ports.
* `Server` and `Router` now initialize their own `net.Listener`s, avoiding a race condition where the tests would begin running before the server was ready.

Closes #30. @bbangert, @jrconlin, @rafrombrc r?
In this case, I'm either waiting to receive on the `stop` channel, or send on `result`. As soon as `notifyAll` [receives on the `result` channel](https://github.com/mozilla-services/pushgo/blob/feature/pluggable-discovery/src/github.com/mozilla-services/pushgo/simplepush/router.go#L275) (or times out), it returns and [closes `stop`](https://github.com/mozilla-services/pushgo/blob/feature/pluggable-discovery/src/github.com/mozilla-services/pushgo/simplepush/router.go#L258). A receive on a closed channel always succeeds, so `select` will always choose the `<-stop` case.