Handle some stream delegate edge cases better.

The NSAssert in SPDYSessionManager in streamCanceled has been seen to
fire, so this change attempts to address those by very explicitly
managing the stream's delegate pointer when ownership of the stream
changes.

Tests included later.