debugger: add the beginnings of a debugger

The debugger will support bidirectional communication.  In order to
do this, we must have an interrupt handler on the client side, and
we must be able to send and receive data.

This program supports sending and receiving data.  For every packet it
gets, it increments an internal counter and sends the result back.

More work needs to be done to make it interactive.