We need to start the TcpListener before the any automatic port assignments are done.
Add a timestamp to the mtouch output.

Makes it easy to see if a test run finished immediately (indicator
of a startup crash for instance), or something else happened later.
Always cancel the listener when mtouch exits for simulator runs.

mtouch will only return a failure code for simulator runs if the
app couldn't be launched in the simulator, in particular mtouch
will always return 0 for any exit code from the app.

This means that once mtouch exits (for simulator runs), we know
the app isn't executing anymore, and we can cancel the tcp
connection.

Previously we could wait forever if the app just exits from the
Main method (we'd wait forever for a connection), or if the app
crashes during startup.

Just in case it was a clean and expected exit from the app, and
for some reason the tcp listener hasn't finished yet, we wait
a second before cancelling the server. This should flush everything.