utils: Make EventEmitter.num_listeners() return total listener count
session: Add internal emitters mapping

Will be used to keep objects with attached event listeners alive.
plcont: Make PlaylistContainer an EventEmitter
session: Replace sp_foo** with int* in tests
session: Reuse PlaylistContainer if it has listeners
plcont: Add playlist_added callback
plcont: Add playlist_removed callback
plcont: Add playlist_moved callback
plcont: Add container_loaded callback
Switch from Fabric to Invoke as dev task runner

We don't need the remote host parts of Fabric and Invoke works on Python 3,
with a very similar API.