Initial implementation of high-level interface

This includes #25 but will be rebased.

We should have a 'high-level' function that can take many different kinds of input and understand them, and this is a first stab at it.
I think you need a dot at the end of this sentence of Sphinx will screw up the html docs.