
Provides a Q promise API for HTTP requests and responses.  This should
resemble JSGI and its hypothetical inverse, but I haven't pored
through the specification to ensure this.

The API

    Server(respond(request):Response*)
        listen(port:Number):Undefined*
        stop():Undefined*

    Client(port:Number, host:String)
        request(request:Request):Response*

    request(request:Request):Response*

    Request:Object

        version:Array HTTP version
        scheme:String e.g., "http"
        method:String e.g., "GET"
        host:String
        port:Number
        remoteHost:String
        remotePort:Number
        scriptName:String the routed portion
            of the path, e.g., "" for the
            root document
        pathInfo:String the part of the path
            that remains to be routed, e.g.,
            "/" for the root document
        path:String the full path, regardless of routing
        url:String the full URL, regardless of routing
        headers:Object
        body*
            forEach(write(String*)):Undefined*
        nodeRequest
        nodeConnection

    Response:Object

        status:Number
        headers:Object
        body*
            forEach(write(String*)):Undefined*
        onClose:Function?

Conventions

    `*` indicates that a value may be a promise
    `?` indicates optional
    `||` indicates a default

Copyright 2009, 2010 Kristopher Michael Kowal
MIT License (enclosed)

