Make webserver's /trace handler resilient to files with timestamps in the name.

Summary:
9f5c2f6 introduced timestamps into build.trace filenames, which broke
`TracesHelper.java`'s policy for finding the `.trace` file for a given trace
id. This fixes the policy, but requires touching the filesystem.

Test Plan:
Added `[httpserver]\nport=8082` to `.buckconfig.local` and verified that
the links from `/traces` on the webserver work again.
Add documentation about BUCK_DEBUG_SOY near code that uses it.

Test Plan: Read documentation; found it useful.
Create a web page to see the output from StreamingWebSocketServlet.

Summary:
`WebServerBuckEventListener` and `StreamingWebSocketServlet` work together to push
Buck events down to a client via a WebSocket. This could be used for:

* Creating an HTML5 SuperConsole.
* Creating a realtime visualization of a build using d3: https://github.com/mbostock/d3/wiki/Gallery.
* Creating a communication channel with an IntelliJ plugin.

As such, it is useful to have a lightweight way to test out the WebSocket.

Test Plan:
Went to http://localhost:XXXXX/static/test_websocket.html while a build was
running, opened the JavaScript console, and verified that events were printed to
the console, as expected.
When port=0 in .buckconfig for [httpserver], it will pick a random free port.

Summary:
If multiple checkouts of the same repository are being built on the same machine
with Buck simultaneously, then it is important that the corresponding webservers
do not try to claim the same port. In that case, it makes sense to configure
`.buckconfig` as follows:

```
[httpserver]
  port = 0
```

If individuals want to use a stable port, then they can override this in `.buckconfig.local`.

They can also use a negative value for `port` to disable the web server.

As part of this diff, this is now documented in `docs/concept/buckconfig.soy`.

Test Plan:
Used `port = 0` and verified that a random port was chosen and was printed out to the
console by Buck. When `buckd --kill` was run, verified that the webserver was shut down.
Fix bugs causing ZipStep to write invalid uncompressed zips.

Summary:
There were a few bugs in `ZipStep` and `OverwritingZipOutputStream`
that were causing uncompressed zip entries to get writting incorrectly.

Test Plan: added test case
Do not serialize events if there are no WebSocket clients connected.

Test Plan:
Built a large Android app with `time buck build` with the following settings
in `.buckconfig.local`:

```
[httpserver]
  port = -1
```

```
[httpserver]
  port = 8081
```

In both cases, Google Chrome was closed, so there were no WebSocket clients
connected to the web server.

Both the CPU time according to `time` and the build time according to Buck
were within 1s of one another, so less than a 1% difference. I don't see any
evidence that enabling the web server has a significant impact on build times.
Make it possible to syntax-highlight .ini files.

Summary:
Takes a bugfix recommended to google-code-pretty to support .ini files:
https://code.google.com/p/google-code-prettify/issues/detail?id=223.

If you read the comments, I had to make some minor changes in order to
match the minified properties in `prettify.js`.

Test Plan: Use in follow-up diff to pretty-print .buckconfig code samples.
Cleanup the buckconfig documentation.

Summary:
* Updated `prettify.js` to fix a bug with `.ini` highlighting for lines that contain only `#`.
* Added `class="prettyprint lang-ini"` to `<pre>` tags, as appropriate.
* Alphabetially sorted the sections.
* Created a table of contents.
* Added an `id` to each `<h2>` so that it is hyperlinkable.
* Fixed some spacing and wrapping issues.

Test Plan: Run `./docs/soyweb-local.sh` and manually inspected http://localhost:9811/concept/buckconfig.html.