delay session creation in redis until it is actually needed

All the extra paranoia around random number generator is really nice,
but it has one unfortunate side behavior - it creates session in
redis very early. Many rails sessions are NEVER being saved (most simple
example - session that was requested and used to read some non-existing
values is discarded at the end of the request processing by Rack
itself). Having paranoid code makes redis perform more of write
operations, and results in redis having more trash in it at the end of
the day.

I liked 'paranoia' in generate_sid as long as the only price for it was
extra complexity and some extra CPU cycles, but having all those extra
sessions needlessly created in redis seems to be too much of a price to
pay for it.
new session should not be created just because client had invalid session id

.session_exists? override was added to prevent needless new sessions
from being created in scenario where user HAS session id, but it already
expired, or is invalid for some other reason, and session was accessed
only for reading. It adds the expense of extra call to redis, but
delays (and in some cases, prevents) sessions creation.