add support for multiple engines

rename compilers to engines (and engine can compile and render, a
compiler can only do the former)

remove `.catch`es from test.coffee (let the error propagate when it hits
`.done` for better stack traces)

simplify compiler initalization a little by using a single constructor
defined in the base Adapter

add some more docs