Add a higher-level 'conduit' interface

I'm unsure about merging this (plus it still needs testing), but it
should provide a much cleaner interface for anyone doing any really
meaningful bot.