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.
does faraday not require config to be a hash?  
Obtuse way of asking does ``` builder.use(middleware[:class], middleware[:config] || {}) ``` work, i guess.