Pick up middleware from plugins

Implements the plugin interface as far as the middleware bit is concerned. Assumes everything is in HTTP world. The new specs pass, I'm getting a few failures on old specs due to the test service returning blank 200 responses every so often but I'm pretty sure that's not my code's fault.

If anybody knows the actual name for what I'm trying to do with PartiallyOrderedList (constraint satisfaction?) there's probably a better algorithm/gem out there for it.
Faraday doesn't require anything of the arguments, as far as I can tell. Some middleware have `initialize` methods with arity of 1, and I wanted to at least allow that.