feature(file): display file upload limit on file upload form

Refs #6355
feature(groups): Added featured groups as a tab along with groups, popular, discussions

Slightly changed and combined work of @thuvalpakshi
feature(core): better registration of usersettings handlers

This will allow plugin developers to replace specific parts of the user
settings action without redoing part of the core actions.
chore(composer): pull version from composer.json

This would allow us to use grunt-bump to increase version numbers
programmatically to reduce release-process overhead.

Also opens to the door to install Elgg with composer:

```
composer create-project elgg/elgg ./path/to/elgg
```

Refs #6288
chore(release): conventional-changelog support

Refs #6783
Merge pull request #6807 from ewinslow/automate-b6783

conventional-changelog support
chore(docs): Make toctrees only one level and correct several typos

Refs #6799
Merge pull request #6810 from ewinslow/docs-fixes

chore(docs): Make toctrees only one level and correct several typos
docs(contribute): add instructions for translators
Merge pull request #6811 from ewinslow/docs-contribute-i18n

docs(contribute): add instructions for translators
Merge pull request #6793 from jeabakker/user-settings-save

feature(core): better registration of usersettings handlers
chore(release): Add .mailmap to canonicalize contributors
Merge pull request #6813 from ewinslow/release-mailmap

chore(release): Add .mailmap to canonicalize contributors
fix(groups): Run discussion reply migration regardless if groups plugin is enabled.

This upgrade must be run even if the groups plugin is disabled because the
script will be removed in Elgg 1.10 and we don't want anyone to get stuck
with old annotation replies just because the groups plugin was not enabled
when site was upgraded from 1.8.

Fixes #6729
chore(release): add script to automate most release steps

Usage: php .scripts/release.php ${version}

Refs #6783
Merge pull request #6818 from ewinslow/automate-release

chore(release): add script to automate most release steps
chore(tests): persistent login tests are no longer fragile

The persistent login component unit tests were failing when run close to
the border between seconds on the clock because ElggCookie::setExpiresTime
depends on the current time. I refactored to allow injecting the current
time into the persistent login component.

Fixes #6829
Merge pull request #6823 from juho-jaakkola/force_discussion_upgrade

Run discussion reply migration regardless if groups plugin is enabled
Merge pull request #6830 from mrclay/6829

fix(tests): persistent login tests are no longer fragile
fix(core): prevents upgrade scripts from attempting to create the same ElggUpgrade more than once

Attempting to create two ElggUpgrade objects with the same URL causes a fatal error. Now the
scripts check whether the ElggUpgrade already exists.

Fixes #6824