Fix typo in upgrade notes
Only 3.10.x branch of ZODB3 is supported

Next version is actually a metapackage depending on:
  persistent 4.0
  BTrees 4.0
  ZODB 4.0
  ZEO 4.0

Note that version '123dev' is considered lower than '123'
client.container: Reduce lock contention on queue.put .
client.container: Use __slots__ for faster attribute access.
client.Storage: Patch instance when read_only is true.

Replace a per-call cost with a constant one.
storage.database.mysqldb: Optimise getObject for most likely case.

loadBefore is more likely than other loads, as it is how repeatable-read is
implemented and the vast majority of accesses are scoped to a transaction.
So put it first in 3-branches "if" choosing between load/loadBefore/loadSerial
code paths.
next_serial is likely to not be found, because application will likely
operate on up-to-date objects. So a test is more efficient than a
try..except. Inline this test in return statement to avoid defining a local.
client.pool: Optimise getConnForNode for most likely execution path.

Connection is more often established than not, so do a first lookup without
locking, and only acquire it if it misses. Then do a second lookup in case
another thread also established connection, and connect if it still misses.
client.pool: Optimise iterateForObject for most likely cases.

Nodes are likely to be running, so filtering before sort is unlikely to
save time. Caller is likely to stop iterating after first yield connection
("load" case), so move filtering inside loop.

Also, document non-straightforward code.
master.handlers.client: Fill set on construction rather than later.

Also, drop extraneous parentheses in another set's creation.
master.handlers.client: Inline single-use locals.
lib.profiling: Remove.

Use a non-intrusive code profiling tool with NEO instead, like pprofile.
client.container: Do not duplicate self.new() .

Also, saves one local variable assignment in "hit" code path.
client.app: Pipeline AskStoreTransaction.
lib.connection: Use a more efficient data structure for request queue.

Packets being mostly treated in chronological order, using an ordered data
structure is more efficient in average than a mapping.
As typical operations are:
- appending
- popping first item
- peeking at first item
a collections.deque is more efficient than a list.
lib.event: Do not check timeout on each epoll wake-up.

The largest cost in this code is connection lock acquisition, not checking
timeout.