Support items not stored in repo

ItemPage initialiser allowed title to be None, however it would
cause all methods including exists() to fail, throw different exceptions
and 'id' would change after an exception.

Replace magic 'null' inside ItemPage.fromPage with '-1' as a consistent
way to refer to an item which does not have a Qxx allocated by the
repository.
- ItemPage.__init__(site, title=None) uses title '-1'
- update getID() and title() to output '-1'
- always throw InvalidTitle for incorrect Item and Property titles

Add lazy_load param to ItemPage.fromPage which is used to synchronously
raise NoPage if page does not exist or does not have an item in the
repository, simplifying error handling in scripts.  All related code
can be found with a search for 'lazy_load'.

Move WikibasePage.title() logic for namespace()==0 into ItemPage.

After item.editEntity, refresh the item object if a Q was allocated
to it by the repository.

This complements change Ibe77c51fc5cf3dae8ece533cc5787bf960f0ebed
allowing an empty item to be instantiated and populated before
submitting it to the repository.

Change-Id: Ibea8f84242a6e938882059f5d5fa28394b8a7a23
Merge "Support items not stored in repo"