add "keepalive" for remote_execute

The caller can disable this option on calls to
remote_execute() which will automatically close
the connection after successful execution.

NOTE: This is a significant logical change in the
logic of remote_execute. The previous version of
the method closed the connection *by default* each
time remote_execute was called. This changes that
behavior to be completely opposite, where the
connection will always remain open *unless* keepalive
is set to False, like so:

    # automatically closes the connection
    client.execute('echo hello', keepalive=False)

the default will keep the connection alive:

    # both commands run on the same transport instance
    client.execute('echo hello one')
    client.execute('echo hello two')

This change also adds the context managers to RemoteShell,
so that you can ensure that the connection will be closed
without having to rely on the controversial __del__(), which
has also been implemented for RemoteShell in this submission.

To use the context manager ( with statement ):

    with RemoteShell('123.123.123.2') as client:
        client.execute('echo hello')
        client.execute('echo again')

The sysinfo providers will now use the context manager
implementation. See `get_systeminfo` in ohai_solo.py
and posh_ohai.py

Change-Id: I267f7efe0f588c5bdc83b419c01997a69378c308
Implements: blueprint remain-open-post-remote-execute
Allow non-sudo escalations and prevent cmd dupes

If a root_password is supplied to the RemoteShell
initialization ( where applicable ), 'su -' will be
used to escalate the command, regardless of the user
that logged in. This effectively means that two passwords
may be supplied when instantiating RemoteShell, 'password'
and 'root_password'. Of course, if the username is actually
"root", the logic will infer that the corresponding password
may act as 'root_password'. The standard procedure will
be to simply use the "sudo" prefix if escalate=True on
remote_execute().

In the previous implementation, to run a command as su, you
would have to explicitly include the prefix with your command.
This change allows the executor logic to determine how to
proceed, and the caller will only need to call remote_execute
with escalate=True, like so:

    client = RemoteShell('123.123.123.5', username='bob',
                         password='bobsecret',
                         root_password='secret')
    # in this case, 'su -' will be used to escalate
    client.remote_execute('mkdir /things', escalate=True)

The second feature added to remote_execute with this change is
the allow_many keyword. To prevent your RemoteShell client from
executing the same command twice, pass allow_many=False. This
will run `ps -ef |grep -v grep|grep -c <your command>` and ensure
that the response is "0".

    client.remote_execute('echo not twice!', allow_many=False)

If the command is found to be running already, a
SatoriDuplicateCommandException will be raised.

Change-Id: I993472ecadebd67cb0bde49e692c1924c6d5c88e
Implements: blueprint allow-non-sudo-escalation
Work toward Python 3.4 support and testing

Change-Id: I0624d09156df070238ba02576d3be627211d8900
Change ohaisolo and poshohai domains

This replaces the URLs for Ohai-Solo and Posh-Ohai to use a
rackspace.com domain in order to help properly identitfy the source of
the packages and prevent confusion to users on what is being done.

In the future, this URL should be fully customizable to allow for
someone to host their own Ohai-Solo/Posh-Ohai packages if they so
choose.

Closes-Bug: #1386745

Change-Id: If2b58846eb47c550614a94d73bdf33ac79ff9cf5
fixes "su -" escalation

root_password was not being passed through from the RemoteClient
to the SSH client instantiation.

Change-Id: I4cd61821dd9fbe099bcdc2097807446d4072f9c4
Closes-Bug:#1362666
Fixes interactions with popen handles

Includes logging updates and other optimizations/improvements.

Change-Id: Icf704164292637b92da25d8c720a72a5ca7c6ba6
Closes-Bug: 1381195