Add support for clean shutdown of idle connections

Spent some time over the weekend address a few issues with manners and adding more tests.

This first branch/PR maintains a backwards compatible interface with the existing implementation and also:

* Stop server from allowing keep-alive requests after shutdown begins
* Remove race conditions from tests
* Remove mutex from listener
* Improve tests and make deterministic
* Maintains interface backwards compatibility

However I did more work in another branch that goes further at the expense of backwards compatibility.. I'll open a PR for that one separately so you can take a look.