#32 make Engine a pure interface
#33 allow binary responses from engines
#33 allow binary output