Make protect.py more wiki-agnostic

- Removed most harcoded protection level and types
- Applies protection levels only if the make sense depending on
  Page.applicable_protections().

- The ProtectionRobot class extends pywikibot.Bot
    - 'protections' dict replaces 'edit', 'move' and 'create'
    - the 'always' switch is now a standard option

- Clarified "-unprotect" option and added "-default[:<level>]"
    If a protection type (e.g. "edit") is not defined, it
    chooses by default "sysop". "-default" overwrites this and
    "-unprotect" acts like "-default:none". Only "-default"
    will change only the explicitily set protection types.

- Fixed in Page.protect() that prompt only defaults to True if
  protections was None ("deprecated mode")

Bug: 55057 - implicitly enable the 'upload'-type protection
Change-Id: I41146fa0c161a242834ab0b1fe2954c7b89d7fd1