ControlFloor Provider HTTP server

This is preliminary documentation, added here just so that it exists, and can be incorporated into the main application at a later time.

In the future, it should be possible to run a local http server in tandom with a ControlFloor connection.  In this initial version, it is either/or.

To launch the provider in local http-server mode:

./main runHttpServer

This will start an http server listening on http://localhost:PORT 
where PORT is specified by the top-level httpPort value in config.json.

Examples below assume port 8080

URLS:
http://localhost:8080/screenshot
    Returns a jpeg screenshot of the current device screen. Refresh browser to update.

http://localhost:8080/action/[command][?arg1=val1][&arg2=val2...]
    A URL interface for executing arbitrary ControlFloor commands.  Depending on the command, 
    it may be serviced by the provider directly (such as "launchApplication"), or forwarded to CFAgent.

    Not yet tested:  You should be able to HTTP POST a JSON dictionary of arguments to any command.  For some
    commands (such as "multiTouchGesture"), the complex argument structure can only be sent via POST. However, 
    as a convenience, simple top-level key->value arguments can be passed directly in the URL. For example:

    http://localhost:8080/action/getSystemApplicationStructure
    http://localhost:8080/action/tap?x=100&y=300
    http://localhost:8080/action/launchApplication?bundleId=com.apple.mobilenotes
    http://localhost:8080/action/typeText?text=The%20quick%20brown%20fox%20jumps%20over%20the%20lazy%20dog

    In JSON, values must be strictly typed as integer, string, etc. As a URL parameter, the following logic is used:
        1. If it is one of the known possibly-numbers-but-always-string keys "text", "elementId", "label" or "path", handle as a string. 
        2. If it parses as an integer, handle as an integer
        3. If it parses as an float, handle as an float
        4. Else, handle as a string
    This seems to cover most real-world scenarios; will be adjusted if needed.

http://localhost:8080/browse
    Rudimentary filesystem browser.  Limited use due to the limited read-permissions of the XCTest process. 
    Tapping a directory will descend into that directory.  Tapping a file will download that file.
    Symlinks are known to not currently be handled properly (I believe it downloads the link, not the contents, and directories may not be followed). 

    NOTE: this has been designed to be wget compatible for recursively dumping directory trees. For example:
        wget  -r -l inf -A strings,plist,stringsdict --content-disposition --no-parent "http://localhost:8080/browse/Developer/"
    For the wget --no-parent option to function properly, you MUST include the trailing slash in the directory name.

