Don't disconnect from XMPP when UI closes

It happens automatically anyway, and was causing race conditions and
lock-ups in tests.
Extract SniperPortfolio
Add spec for portfolio notifying its listeners
Add spec for UiThreadSniperListener
Remove leftover old method
Add chapter 17 tag link to readme