Basic functionality for the Bowler protocol. Still need to do a bunch of work, but here's enough to do everything if you're willing to hack around