ERP5Type.ERP5Type: Avoid modifying object if local roles are unchanged.

Also, avoid reindexing when object is not modified.
ERP5Type.ERP5Type: Make updateRoleMapping work with 100k+ documents.
ERP5Type.Base: Tolerate _baseGetTitle absence.

Although it should never happen in normal use, it may happen during an
upgrade when property sheets fail creating accessors (ex: broken object
because portal type moved to a different Business Template).
erp5_banking_core: Drop orphan related keys.

These related keys override auto-generated ones without adding any value.
Also, they are not declared as related keys, so declaration is
auto-generated and may not match ZSQLMethod parameters, causing errors.
ZSQLCatalog.SQLCatalog: Pass sql_catalog_id to getDynamicRelatedKeyList.

Also, get rid of single-use locals and unneeded list copy.
ERP5Catalog.CatalogTool: range can generate decreasing sequences directly.

Also, use xrange as it's faster than range even for short sequences.
ERP5Catalog.CatalogTool: Do not join with catalog when condition is on uid.

Also, factorise related key string generation.
ERP5Catalog.CatalogTool: Support all catalog columns in auto-generated related keys.
fix a typo in explanation_source_section_uid related key definition.
Test: do not change permissions just for the test
budget consumption report: display 0 instead of NaN when there's no budget
erp5_accounting: Include mirror_section_uid in section_uid index.

Accelerates (at least) Person's jump_to_accounting action.
use a random Initialization Vector for AES using CFB (Cipher FeedBack).

https://www.dlitz.net/software/pycrypto/api/current/Crypto.Cipher.blockalgo-module.html#MODE_CFB
fixup! SimulationTool: rewrite getAvailableTimeMovementList
ERP5/PresencePeriod: allow to customize the place to find calendar period exceptions
erp5_calendar: define permissions on the module
erp5_calendar: allow to customize the list of periods (exceptions included)
SFTPConnection.readBinaryFile now returns binary str, instead of StringIO object.

also readAsciiFile normilises CRLF/CR/LF.
Use default __hash__ method for ERP5 objects

If an object has no uid yet and has no acquisition context to the portal,
getUid() fails.

Default is derived from id(aq_base(ob)) which is even more efficient.

The method on XMLObject was also redundant because it inherited the same one
from Base.