Add client close() method to release pipe FDs

And guard against hitting a closed pipe in _call()
Close clients in testing harness