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
@robmorgan Only a couple of methods are chainable... I think I caught them all, but a sanity check would be good.