Push notifications

The main body of work in this commit is the introduction of push notifications.
A websocket endpoint is available at `/api/push` on which clients can subscribe for activity streams.
So far, no work has been made to make this exensible and support non-activity related features.

Overview
--------

Each app server will have their own transient queue on which it can receive activities.
If the app server dies, this queue and all the activities in it will be removed.

When activities are routed, each one of them will be published to a special exchange `oae-activity-push` with a routing key of `resourceId#activityStreamId`.
This allows us to route activities from the exchange to the app server queues who are interested in those feeds.

When a client connects to a socket he'll end up at an app server. The client will need to subscribe
to certain activityfeeds (his/her activity stream, his/her notification stream, a piece of content's activity stream, ..)
in order to start receiving push notifications for them. When a user subscribes for a feed, the app server will instruct
the message exchange to send all activities for that particular feed to its own queue. When an activity occurs in that feed,
it will end up at the queue, the app server will receive it and then immediately send it out to the client.

In theory, a user will get a push notification as soon as an activity has been routed. Since routing happens as soon as a new
activity has been received from RabbitMQ, this should be very fast.

Refactor work
-------------

Some things had to be refactored in order to support all of the above.

1. Split off task queue functionality from util/MQ into util/TaskQueue
To support the creation of custom queues/routing of messages, the MQ-utility now exposes more direct access to RabbitMQ.
The old functionality is still available in a new utility called `TaskQueue` which is a small wrapper over the `MQ` utility.

2. New activity streams
Activity streams are no longer tied to just `user`s and `group`s, all top-level resources (`content`, `discussion`) can
have their own activity streams.
`activity` and `notification` are also no longer the only supported streams. Users can declare their own streams to which
activities can be routed.
So far the following streams are available:
 * activity
 * notification
 * message (for content comments and discussion messages)

3. Transient routes
Some activity streams don't really need to be persisted to disk (ex: the `message` stream).
When a stream has been marked as transient, its activities will only be emitted after the routing phase and will then be dropped.
These will **NOT** be aggregated.

TODO
----

1. Migration
We will require some migration/transitioning period as activity streams now have slightly different keys.
Use the old activityStreamId in case an activity stream is being request
Cleaned up the MQ utilities.
Push notifications PR follow-up

 * Renamed activityStreamId to streamType in push subscriptions
 * Create utility methods for creating/parsing activity stream IDs
 * Added some jsdoc about the MQ setup
 * Various cleanup in oae-activity/internal/push
Push Notifications follow-up

 * Using `replyTo` for replies to earlier client messages
 * Cleaned and added a bunch of unit tests
 * Added a maximum timeout of 5 seconds. If the client hasn't authenticated by then, their socket will be dropped
Push notifications follow-up

 * Added a `self` propagation
 * Removed `members` association for `discussion-message` and `content-comment`
Fix race-condition in activity test migration test
Merge branch 'master' into simong/push-notifications-sockjs

* master:
  Bumping cassandra to version 1.2.13 for TravisCI
Fleshed out the activity entity transformer

There are now two types of transformers:

 * `activitystreams`
 * `internal`

`activitystreams` returns transformed activity entities that is compliant with the activitystrea.ms spec.
`internal transforms activity entities into their OAE profiles
Changed year in copyright headers to 2014
Removed double copyright header
Change some lingering 2012 Sakai (C) headers to 2014 Apereo
Fixing node-validator on 2.0.0
Revert validator to version 1.1.3
allow specifying a config file on the command line
add help output
fix path resolution
Follow-up on multiple activity transformers

 * Only pull down unique revisions in the content transformers
 * Cleaned up some comments
Merge pull request #738 from stuartf/configopt

allow specifying a config file on the command line
(Issue 723) Don't generate activity when following a user you already follow