Allow arbitrary ids/headers to be used

@ejholmes This keeps the same backwards compatible behavior, but allows you to configure each middleware to use whatever request header, response header and key name you want.