Fix typo in README.rst

It's wal-push, not wal_push
Extend fixture to truncate gevent timeouts

Previously, a monkeypatch driven fixture to shorten timeouts was put in
place to expedite testing of non-terminating cases.

Noticing that tests/test_wal_transfer.py::test_finally_execution was
slow, it seems that the killall/joinall interaction was not affected by
that monkeypatch.  So, truncate the timeout of those operations as well.

Doing this exposed that at various point the gevent-fast-sleep stuff got
copied around several times with very minor modification after all this
time.  Refactor it into one copy, netting a reduction in code.
Support double-closing of pipe reading/writers

This is consistent with a normal file in Python, e.g.:

    >>> f = open('/dev/null')
    >>> f.close()
    >>> f.close()
    >>>

Failures to "del self._bd" -- presumably from multiple .close() calls --
have caused a number of confusing stack traces in various situations.

The order of operations here have been carefully re-ordered so that the
invalidation used to assert closed-ness (self._fd = -1) can only occur
if the delegated "_fp.close()" succeeds.  And, in case of any raised
asynchronous exception, the "del attr" constructs have been made
optional, as so close() can be called after an exception and "closed"
reports properly.