Always respond with text frames.

Go's WebSocket library uses a type switch on the message payload to
determine whether to send a text or binary frame.
Add update-after-reconnect test.
Client: Add optional error logging.
Ensure `TestPushReconnect` acknowledges messages.
Makefile: Add a `test-gomc` task.
Protect against multiple `RemoveClient()` calls.

Fixes a race condition caused by a client reconnecting with the same ID
and `replaceWorkers` enabled. In some cases, `Serv.Bye()` was called
for the old socket after the client reconnected, removing the new
socket from the client map.
memcached: `fetchRec()` should never return nil.

Fixes a nil pointer exception in the gomemcache adapter.
Merge pull request #140 from mozilla-services/feature/test-renotify

Test sending an update after reconnecting
Merge pull request #147 from mozilla-services/bug/ping-frame-type

Always respond with text ping frames
Add `retry.Helper`.
Retry failed test notifications.
Travis: Test on tip-of-tree Go.
`retry.Helper.Filter` => `CanRetry`.

* Document `RetryFunc` and `RetryAttempt`.
Expose `retry.Helper.Backoff`.
`RetryAttempt`: Fix the backoff algorithm.

`RetryAttempt` now returns the expected delay in addition to indicating
whether the operation can be retried.

`RetryFunc` now returns the correct number of attempts if the retry
was cancelled.
Allow `MaxJitter` = 0.
Add retry tests.
Fix the `golang.org/x` repo tag.
Merge pull request #145 from mozilla-services/feature/retries

Extract retry logic into a common helper
Add balancers.

* Add a `Balancer` interface and `{Etcd, Static, No}Balancer`.
* Enable client redirects. `Worker.Hello()` returns a 302 if a peer is
  available, or a 429 if the cluster is full.
* Clean up etcd-related log messages.