Exchange options

Support declaring an exchange with options as a map to support more complex exchange usages. Allow consumer of the behaviour to pass args[:exchange_opts] to cause the declaration of an exchange with the specified options, so the application can create the exchange automatically if necessary.