allow registering custom senders

This also makes it possible to send records to something other than an io.Writer.
allow registering custom IO drivers
allow registering custom encoders
use RegisterIO/Encoder and prove they work.