share impersonation session data with regular session data

this PR fixes #109
Actually, maybe not.

More precisely:

Session objects are themselves mutable, and therefore should compare by identity.  This attribute shouldn't be excluded from comparison; that would make two sessions with different mutable data compare the same, which would be even weirder.  If anything, this branch makes the situation better, since now two `Session` objects will have to have the same session state to compare equal, and previously they would have *appeared* to be value-equal even if all their state were different.

Also, having a dict object participate in `__hash__` means that a `Session` now (arguably, as it should be) is unhashable.

So I think maybe a separate issue to address session comparability/hashability.