Ensure tox is installed

Look for ``tox``, and if not found, install it via ``pip`` into a
virtual environment for the current user.

**Role Variables**

.. zuul:rolevar:: ensure_tox_version
   :default: ''

   Version specifier to select the version of tox. For example if your
   project is not compatible with tox v4 you can set this value to
   `<4` to install the latest v3 release. The default is '' which
   installs latest.

.. zuul:rolevar:: tox_prefer_python2
   :default: False

   If tox is not detected, prefer to install tox inside Python 2
   instead of Python 3.

   If set,
   :zuul:rolevar:`ensure-pip.ensure_pip_from_packages_with_python2`
   will be automatically set to `True` to enable a Python 2
   installation of `pip`.

.. zuul:rolevar:: ensure_global_symlinks
   :default: False

   Install a symlink to the tox executable into ``/usr/local/bin/tox``.
   This can be useful when scripts need to be run that expect to find
   tox in a more standard location and plumbing through the value
   of ``tox_executable`` would be onerous.

   Setting this requires root access, so should only be done in
   circumstances where root access is available.

**Output Variables**

.. zuul:rolevar:: tox_executable
   :default: tox

   After running this role, ``tox_executable`` will be set as the path
   to a valid ``tox``.

   At role runtime, look for an existing ``tox`` at this specific
   path.  Note the default (``tox``) effectively means to find tox in
   the current ``$PATH``.  For example, if your base image
   pre-installs tox in an out-of-path environment, set this so the
   role does not attempt to install the user version.