##### SUMMARY
There is no real reason that `UnsafeProxy` needs to exist.  

We need to add unsafe bytes support, and by doing so within `UnsafeProxy` over complicates matters.

`wrap_var` should effectively take over the work that `UnsafeProxy` is doing, and then just rely on `wrap_var` directly using the proper `AnsibleUnsafe*` classes. Or callers can directly use `AnsibleUnsafe*` themselves when `wrap_var` isn't necessary.

##### ISSUE TYPE
- Feature Idea

##### COMPONENT NAME
lib/ansible/utils/unsafe_proxy.py

##### ADDITIONAL INFORMATION
<!--- Describe how the feature would be used, why it is needed and what it would solve -->

<!--- Paste example playbooks or commands between quotes below -->
```yaml

```

<!--- HINT: You can also paste gist.github.com links for larger files -->

if val is not None and not self.unsafe and self._is_unsafe(val):
            self.unsafe = True
    def resolve(self, key):
        '''
        The intercepted resolve(), which uses the helper above to set the
        internal flag whenever an unsafe variable value is returned.
        '''
        val = super(AnsibleContext, self).resolve(key)
        self._update_unsafe(val)
        return val
    def resolve_or_missing(self, key):
        val = super(AnsibleContext, self).resolve_or_missing(key)
        self._update_unsafe(val)
        return val
class JinjaPluginIntercept(MutableMapping):
    def __init__(self, delegatee, pluginloader, *args, **kwargs):
        super(JinjaPluginIntercept, self).__init__(*args, **kwargs)
        self._delegatee = delegatee
        self._pluginloader = pluginloader
        if self._pluginloader.class_name == 'FilterModule':
            self._method_map_name = 'filters'
            self._dirname = 'filter'
        elif self._pluginloader.class_name == 'TestModule':
            self._method_map_name = 'tests'
            self._dirname = 'test'
        self._collection_jinja_func_cache = {}
    
    
    def __getitem__(self, key):