First version of the suggested front end testing document
Final tweaks to front end testing doc
Clarified browser stats and added some code samples
Minor doc tweeks
Clarify single-quotes rule in Python coding standards
Add CHANGELOG and docs to pull review process
Move URL /user/dashboard to /dashboard

We decided this makes more sense
[#1635] Remove two unwanted action functions

Remove dashboard_email_notification_last_sent and
dashboard_update_email_notification_last_sent logic functions, instead access
the model functions  directly from the lib.

We're not supposed to access the model from the lib, but I don't want to expose
these function as action functions either because they're only needed by this
one lib, I don't want to expose them in the API.
[#1635] Shorten a couple of really long names
[#1635] Remove unnecessary @classmethods from dashboard model

This moves some logic out of the dashboard model and into the lib, which is
probably where it belongs as that's where the rest of the relevant logic is,
and overall this makes the code shorter as well.
Add activity stream tab to dataset page
Fix some PEP8 issues
Tidy a couple of docstrings
Delete a commented-out set_trace()
Refactor dashboard activity stream tests

- Move tests for contents of dashboard activity stream out of test_activity.py,
this test module was way too long and confusing, leave it for testing the
public activity streams only. Add a docstring to the module saying so.

- Add a docstring to test_follow.py explaining that it tests the follower
functions only (follow, unfollow, etc.) and not the contents of the dashboard
activity stream that is generated from what you're folllowing.

- Add new tests for the contents of the dashboard activity stream in
test_dashboard.py along with other dashboard tests.

Currently some of these tests are failing because activities from followed
groups are not appearing in the dashboard.
Add activities from followed groups to dashboard activity stream

Add activities from groups that a user is following (e.g. when someone
updates a group) to the user's dashboard activity stream.

There are still some test_dashboard.py tests failing because activities
from datasets belonging to followed groups dob't appear in the dashboard
yet.
Move group_package_show SQLAlchemy into model

Move the SQLAlchemy query that the group_package_show() action function
uses into the model. I need this for architectural reasons for upcoming
commits, and we're supposed to encapsulate SQLAlchemy in the model
anyway.

I made the new model function support the 'return_query' option but note
that there are no tests covering this, all the tests pass even without
this option.
Remove group.members_of_type()

Remove group.members_of_type() and related code. It isn't used anywhere
except in the old publisher and organizations extensions which are to be
replaced by a new organizations implementation in CKAN core. Also it
duplicates functionality provided by group.active_packages().
Remove duplicate methods to get a group's packages

Refactor active_packages() and get_package_revisions(), both of which
return a group's packages (but in slightly different ways), replace with
just one method packages().

We now have just one way to get a group's packages, the packages()
method of the group model. The group_package_show() action function
calls it.
Fix following of groups

Add activities from the datasets of followed groups into the user's
dashboard activity stream. All the test_dashboard.py tests now pass.

Move SQLAlchemy from group_activity_list() into model, alongside the SQLAlchemy
queries for the other types of activity stream.

Change the SQLAlchemy in activities_from_groups_followed_by_user() to be the
union of group_activity_list() for each of the followed groups.

Update some tests.