Arbiter no longer runs tasks

In a complete change of plans, Arbiter no longer runs tasks, it only solves dependencies. This way it can be used with any kind of task scheduler (implementations for various schedulers is forthcoming).

With that in mind, the API has been completely rewritten (and bikeshedded). Full docs for this new API still need to be written and the README should be fleshed out a bunch. ETA: sometime after I've written a concurrent futures task runner that uses Arbiter for scheduling.

Incidentally, the code for finding cycles in task dependencies has been rewritten to do a depth-first search instead of the hilariously innefficient breadth-first search it had been doing.