run: make namespace optional

When no namespace is provided, we don't expect an answer from the
Chromecast. When an application doesn't allocate a channel, it doesn't
send a directed answer with the supported namespaces. We still get some
general broadcast, but not one directed to our requestId.

Also rework other functions to not wait for anything if we don't have a
callback.
chromecast: use self-executing anonymous functions for subcommands
tictactoe: add a TicTacToe opponent application
tictactoe: add some instructions
tictactoe: ability to play first if needed
channel: remove an event leak

When reading, we wait for either `readable` or `end` event, but only
once and we need to cancel the other event if the other one happens.