fix(entities): reverts to 1.8 behavior of ElggEntity->subtype reads

The subtype property was never properly implemented to return the string subtype
but rather returned the integer ID of the subtype. Although this was "fixed" before
this commit, it was decided that it was dangerous to start returning strings where
older plugins might be expecting integers. This deprecates reads of the property
altogether (encouraging the use of getSubtype()) and otherwise returns the behavior
of the property in Elgg 1.8.

Fixes #5920
perf(upgrade): speeds up migrating remember me codes

The Remember me cookie implementation has been improved by moving codes
to a separate table. This performs that migration in one query.

Fixes #6204
fix(invitefriends): check if registration is allowed before display menu item and pages

Refs #6356
Fixes #6400
chore(invitefriends): form labels

Format labels according to #6356, adds email label and moves instructions into its own div, removes leading spaces in email notifications

Refs #6400
test(groups): add regression test for write access array

Make sure group acl is always within the users write access array when within that groups context

Refs #6393
fix(groups): fix the group acl id in write access array

Refs #6393
fix(invitefriends): make invite form sticky
chore(invitefriends): use p tag instead of div for instructions
Merge pull request #6401 from hypeJunction/invitefriends

fix(invitefriends): check if registration is allowed before displaying...
chore(groups): group acl name formatting
test(groups): update the scope and assumptions of the test
fix(routing): URL-decodes path segments like Elgg 1.8

Non-ASCII characters get URL encoded in $_SERVER['PATH_INFO'] so instead we
copy the URL path into a query string var and use that var to build path
segments in the router. This should yield identical behavior as Elgg 1.8.

Fixes #6218
fix(http): makes HTTP request/parameter bag PHP 5.2 compatible

The original Symfony versions use array_replace. We use array_merge, which
is identical for the purpose it's used.
test(groups): corrects tests for groups write access hook

If an admin user is logged in, all permissions tests pass, even if
we're testing whether a non-admin user has access to something. This
turns on access control for the test.
test(routing): adds more comprehensive tests for router

This tests that the router passes the URL segments and original
identifier to the page handler, and that a URL-encoded segment
is properly decoded.
Merge pull request #6440 from mrclay/hypeJunction-group_acl_test

Write access array in group context should contain that groups acl
fix(site_notifications): added correct key for menu item
fix(upgrade): Setting time_updated and last_action for migrated comment and discussion entities.

Fixes #6395.
fix(css): Added CSS for elgg-state-selected menu items in theme sandbox.
fix(ui): Added CSS to make the site menu show up correctly in theme sandbox.