Create WrapperInterface and AdapterWrapper, refs #413

By creating an abstract wrapper class, we can reduce amount of duplication
between ProxyAdapter and TablePrefixAdapter, while providing a more consistent
interface for future development of additional wrappers.

- Add missing setOptions/getOptions to AdapterInterface
- use AdapterWrapper for TablePrefixAdapter
- use AdapterWrapper for ProxyAdapter
- update ProxyAdapter and TablePrefixAdapter usage in Environment
Happy New Year! :tada: