##### 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 isinstance(obj, string_types) and not isinstance(obj, AnsibleUnsafeBytes):
            obj = AnsibleUnsafeText(to_text(obj, errors='surrogate_or_strict'))
        return obj
def _wrap_dict(v):
    for k in v.keys():
        if v[k] is not None:
            v[wrap_var(k)] = wrap_var(v[k])
    return v
def _wrap_list(v):
    for idx, item in enumerate(v):
        if item is not None:
            v[idx] = wrap_var(item)
    return v
def _wrap_set(v):
    return set(item if item is None else wrap_var(item) for item in v)
def wrap_var(v):
    if isinstance(v, Mapping):
        v = _wrap_dict(v)
    elif isinstance(v, MutableSequence):
        v = _wrap_list(v)
    elif isinstance(v, Set):
        v = _wrap_set(v)
    elif v is not None and not isinstance(v, AnsibleUnsafe):
        v = UnsafeProxy(v)
    return v