Starts a new Interactive client.

    Takes the remote address of the Tetris robot, as well as the
    channel number and auth key to use. Additionally, it takes
    a list of handler. This should be a dict of protobuf wire
    IDs to handler functions (from the .proto package).

def start(address, channel, key, loop=None):
    """Starts a new Interactive client.

    Takes the remote address of the Tetris robot, as well as the
    channel number and auth key to use. Additionally, it takes
    a list of handler. This should be a dict of protobuf wire
    IDs to handler functions (from the .proto package).
    """

    if loop is None:
        loop = asyncio.get_event_loop()

    socket = yield from websockets.connect(address+"/robot", loop=loop)

    conn = Connection(socket, loop)
    yield from conn.send(_create_handshake(channel, key))

    return conn