Remove dereferencing of NULL when in session object.

This fixes the case where the session type could not be created and the
similar from spotify case that where not checking if object creation
succeeded.
Always PyErr_SetString before leaving create_session.

This is needed to ensure that we can't return NULL from Session_create
without having an error set. This also adds a code anotation for
gcc-python-plugin to avoid a false positive for that same code path.
Improve error checking and reference handling in config attr helper.

Makes sure we DECREF in the case where the value is not str/unicode. Also
catches the case where PyUnicode_AsEncodedString can't allocate the new
instance and returns NULL.
Fix application key ref count handling.

Also removes the gcc-python-checker hint, as it simply resulted in another
false positive.
Remember to DECREF message to user.
Correctly handle reference counting in end of track.

Idealy this should not be this nested with ifs, but it's a quick fix to ensure
the memory error goes away for now. Other alternative would be liberal use of
XDECR or a goto for error handling and reference cleanup.
Create generic session callback handler.

Current version simply handles cases where only the session is passed in.
Future versions will likely use va_list to support cases like music_delivery.
Switch play token lost to generic session_callback helper.
Switch meta data lost to generic session_callback helper.
Ensure search callback handles memory correctly.
Switch notify main thread to generic session_callback helper.
Add support for extra object into session_callback
Switch all session callbacks except delivery to helpers.
Cleanup module init code a bit adding todo for further debuging.
Call _manager_logged_out instead of logged out.
Fix indentation.
Use Session_FromSpotify in session_callback
Use Session_FromSpotify in music delivery and cleanup code a bit.
Search callback Py_XDECREF to Py_DECREF as we know it is not NULL.
Cleanup refcount handling in module init code.