ws: Implement CockpitWebServer without threads

The main difference here is that things are no longer threaded
when serving HTTP requests.

This is necessary because we'll have some HTTP requests accessing
WebSocket channels in the future and locking everything will be
a major pain.

In addition the following fixes and benefits:

 * Don't waste a whole thread on unauthenticated requests.
 * Enforce a default 30 second timeout for reading HTTP requests.
 * Hard 4096 byte size limit for HTTP request input.
 * Don't leak so much internal state into error messages.
 * Better setup for queuing and returning responses and guaranteeing
   that they're correct.
 * Simpler to read POST input.
 * Simpler handlers.
 * No memory leak of per request signal detail (ie: the path).
 * No expensive GIO for serving files, just use mmap.
 * Use proper HTTP status codes for invalid requests
 * Fix various races and multi-threading issues due to
   main context usage.
 * Fix breaking out of the HTTP document root with double dots.
 * Add lots of tests for the web server

Although not implemented yet, set the ground work for:

 * Chunked Encoding
 * Correct HTTP version responses
 * Persistent connections (with multiple requests)
 * Output timeouts

Fixes #551
Fixes #550
Closes #556