PreferencesAPI changes, fixes and more

Full changelog:
- PreferencesAPI change: the groups now require an additional parameter, 'groupCodeName', which specifies the unlocalized name of the group. The documentation has been updated.
- The PreferencesAPI groups hidden by the user are now saved. This adds a limitation: using a preference with 'hidden-groups' as the name throws an illegal name error.
- The '[yt]' and '[youtube]' bbcodes are now silently translated with '[video]' by the autocompletion engine.
- Switch to the notification events implemented in the core NERDZ class, using the namespace 'protheme'.
- New PreferencesAPI internal method: store(), which serializes the current storage in the localStorage. Also, the internal localStorage key used by the PreferencesAPI is now a constant.
- Fix the interaction of the PreferencesAPI with other namespaces: before now, any namespace other than the one used would have been cleared by the API. This is no longer the case.
- Switch from obj.hasOwnProperty ('prop') to 'prop' in obj, which is slightly faster.
- Fix the handling of preferences hidden with 'display' and in a group.