First cut at basic Graphviz output of the 'app' network.

New function app.graphviz() generates a 'dot' file as a string. Each
app is a node, each link is an edge, and edges are labeled with
transmit counts.

app.selftest() writes this to ./app-selftest.dot.