/*
    Step by step breakdown of this function:
     GET /gribblegronk?help=idunno&sdlaf=asdf HTTP/1.0
     |  |             |                      |
     0  1             2                      3
      - First, we read the command.  It's between 0 and 1.
      - If it's not GET, then
          - fail with a 501.
      - Then read the filename.  It's between the 1 and 2.
      - Then read the arguments.  They're between 2 and 3. NOTE: If we ever
        implement CGI-ish scripts, we'll have to parse these into
        name-value pairs.
      - Then read the HTTP version.  Should be HTTP/1.0.  Many servers
        seem to ignore this.

     Accept: application/vnd.......
      - Read the lines that follow.
      - If we encounter an empty line, (\r\n\r\n), then
          - Skip onto the next section.
      - These are headers, in name: value format.  Parse these and put
        them into a Properties.

    Processing input:
      - Look for a header named "Host".  If none exists, pull the FIRST
        virtualhost off the serverconf list and skip to the next section.
      - Otherwise, search in the virtualhost vector to find the appropriate
        host.  If none is found, then
          - Default to the FIRST host.
      - Having set our hostconf to the appropriate host, now figure out what
        file we want.

    Sending a response
      - If the URL contains "$VFS:", then
          - Prepend the vfs root and send the file...if it's permitted.
      - Prepend the document root to the URL
      - If the result is a directory, then send a folder listing.
      - Else send a file.
      - Close everything.  Go back to sleep.

    Sending a file
      - If browser caching is on, then
          - See if there is a If-Modified-Since header.
          - If there is one, compare it against the file's last modified date.
          - If there's no change, then
              - send a 304 and exit
      - If the command is HEAD, then
          - Exit.
      - If we've gotten here, that means that we need to send a file.
      - Emit a 200
      - If caching is enabled, then
          - Emit a Last-Modified in the response header.
      - Emit the Content-Length
      - Look up the file's MIME type and send it in the Content-Type header.
      - Emit a blank line
      - Send the file.

    Sending a folder listing
      - If browser caching is on, then
          - See if there is a If-Modified-Since header.
          - If there is one, compare it against the file's last modified date.
          - If there's no change, then
              - send a 304 and exit
      - If the command is HEAD, then
          - Exit
      - If we've gotten here, that means that we need to send a folder.
      - Emit a 200
      - If caching is enabled, then
          - Emit a Last-Modified in the response header.
      - Prepare the directory listing.  Refer to v3's folder directory
        listing routines for details.
      - Emit the Content-Length
      - Emit Content-Type: text/html
      - Emit a blank line
      - Send the listing.

    kpish?

    no, he's not here.
*/