[RFC] First draft of plugin interface design

@csavage-mdsol @sheavalentine-mdsol please review (not now. when you're actually at work).
I just learned Faraday lets you do this:
```
conn = Faraday.new
conn.builder.swap(1, Faraday::Adapter::EMHttp)  # replace adapter
conn.builder.insert(0, MyCustomMiddleware)      # add middleware to beginning
conn.builder.delete(MyCustomMiddleware)
```