Enables zero-config editing functionality

Special:ZeroPortal?change=...&xcs=...&summary=...&token=

where change is a dict of form {
  "+key":"value to add",
  "-key":"any value - will be removed",
  "*key":"value to replace existing" }

Two lua funcs are called: beforeEdit and afterEdit

beforeEdit should use mw.zeroportal.get & setEditData() to validate
what is being modified and set {'allow'=>true}
Once modification is complete, the second lua func, afterEdit,
will be called, and it can decide how to proceede based on the
resultts of the actual editing (success/failure).
In case of any errors, edit data will containn 'error' and 'msg' keys
(an error may occure even before "beforeEdit", so check there too).
"afterEdit" will be called even in case of an error.

Change-Id: I0bfe13875c82a5ff29428945668ed859b4c6c4d8
Merge "Enables zero-config editing functionality"