Tweak API for greater flexibility

* Split async and WebSocket logic from def macros: add `async-response`, `if-ws-request`,
  `when-ws-request` fns.
* Swap out `defasync` and `defwshandler` to use new fns.
* Add `defasync`, `defwshandler`, `start-server` docstrings.
* Add `tools.macro` dependency.
* Add `defasync` and `defwshandler` support for name attributes (docstrings, etc.).