* replace send-* with a send! function that knows what to do with its
arguments depending on type, via a protocol.

* some cleanups here and there