Change SOL code to not send empty data to caller

If a SOL target sends a packet with no new data (e.g. spurious retry), do not
bother the caller with such empty data.  It's a waste of their attention at
best and if the caller is doing something like trying to write the data
straight to a TLS socket, it will trigger EOF exception.

Change-Id: I1d751331bc0fa0087bf671de12507b7fe011f5fa
Stop waiting on logout during atexit

During atexit time, do not wait for BMCs to acknowledge logout.
This is generally a waste of time and can cause things like eventlet
to complain since atexit won't exit in a coordinated way with
greenthread context

Change-Id: I295215614ee6a20ce63f5a9ac37bbe3d9b2d9848
Have ipmi session objects reuse themselves

When multiple session objects would be created by calling code,
avoid creating a conflict on bmc_handlers that would result
in trying to use a corrupt instance.  Either it reuses the
existing object, or else it detects that some parameters are
different and erases old pointers to the now defunct instance.

Change-Id: I883934ae984b2ad0369458bea15f62862c6e97ca
Fix some reentrant scenarios

If a command payload is pending, fix calls to raw_command by
deferring instance modification until the last command was settled.

Fix a deadlock scenario where packet transmit gets blocked by
waiting on incoming packets that will never come by avoiding
calling out to caller custom handlers which might expect to be
submitting new requests during transmit.

Fix a problem if command is requested while awaiting for an SOL
acknowledgement.

Change-Id: Ia352566819cce06c6e4e5279afeb6191838e0488