Store middleware at a module level (e.g. per-runtime) and allow passing of options to specific middlewares

E.g.

    Elementary.use MyMiddleware, :autoconfigure => false, :host => localhost

If the middleware needs to be flushed for whatever reason at runtime,
Elementary#flush_middleware will handle that

Fixes #2, #6