Make some improvements to the API

 - Algorithm constructor now takes function objects as args
 - Old constructor behavior moved to Algorithm.from_dotted_name
 - Replaced algo.get_function('foo') with algo['foo']
 - FunctionNotFound subclasses KeyError
 - Dropped __iter__, just use algo.functions
 - Documented algo.functions
 - Fixed a bug in algo['foo']
 - Brough doctests online

In general I wanted to make it easier to avoid the magic module loading
thing (for @dowski and @pjz), and to drive people more towards just
working with that list of functions.