Publications + Symplectic ingester

 ## Publications

Publications are not linked to any specific tenant and have a very basic datamodel (for now).
Each publication is identified by 1 or more source IDs. For example:

The publication p:abc123def which was ingested from Symplectic. They originally harvested it from
Pubmed and Web of Science. The source IDs for this publication would look something like:
 * pubmed#CC-112-aeda
 * wos#32146541234525

This allows for having multiple ingesters which can ingest publications but keep duplication to a minimum.
For example, if there would ever be a pubmed ingester, it should ingest the same publication with
source ID `pubmed#CC-112-eada`. The ingestion API will detect that there already is a publication for this source ID
in the system and will not create a second record.

OAE users from different tenants can be linked to a single publications. This is to enhance
the cross-tenant. Linking a user to a publication happens by passing in:
 * the publication ID
 * the OAE user ID
 * the name of the user as found in the publication

The passed in name doesn't have to be a full match as some (very basic) disambiguation will be used (JaroWinkler).

 ### REST API

This logic is also exposed on the REST API even though there is no current UI need for it (yet).
This has been done so data loads with the model loader can happen. There is a configuration option in the admin UI
which allows an admin to enable this for regular users. Tenant and Global admins can always use the REST API

 ## Symplectic

An example ingester for symplectic has been added. It's able to do either full or incremental synchronizations.
It will run a synchronization on a configurable (config.js) interval.
On a full update it will:
 * Iterate over all the users in Symplectic, fetch their publications and ingest them

On an incremental update it will:
 * Iterate over all the *updated* users in Symplectic since the last run, fetch their publications and ingest them
 * Retrieve publications for any new OAE users
 * Retry any user that failed previously

Symplectic can be enabled on a tenant-by-tenant basis in the Admin UI.
Publications that are marked as invisible will not be ingested.
Fixed bug in deserializing the cql row into a publication object
Hooked content API in publications API
Follow-up on review
Follow-up on review
Merge pull request #1 from Coenego/publications

Publications module
Merge remote-tracking branch 'oae/master'

Conflicts:
	package.json
Merged oaeproject/master into avocet/master

Merged up master with oaeproject/master.
There was one merge conflict within oae-authentication/lib/api where we
were using the custom DAO we were using.
This has been reverted, so future merges should be much cleaner

This merge brings in the CQL3 functionality. The avocet patches have
been updated so they are fully CQL3 compliant.

The config has also been updated so it points to a separate avocet
keyspace and search index.

* oaeproject/master: (28 commits)
  Set grunt-contrib-jshint to latest
  (TravisCI) Remove global phantomjs to force 'npm install' to download it
  Followup on SQL3
  Fix getLastUpdated for configuration values
  (CQL3) Fix unit test failure
  (Issue 696) Migrate queries to CQL3
  Update notify-discussion-share.html.jst
  (TravisCI) Reset to the build commit, not master which may be updated
  (Release 4.4.0) Remove shrinkwrap
  (Release 4.4.0) Bump version
  (TravisCI) Touch for another build
  (TravisCI) Specify upload region us-east-1 for release uploads
  Disable previews by default
  (TravisCI) Upload to oae-releases bucket
  Removed trailing spaces
  Update notify-follow.html.jst
  Update notify-discussion-update.html.jst
  Update notify-discussion-message.html.jst
  Update notify-content-update.html.jst
  Update notify-content-share.html.jst
  ...

Conflicts:
	.gitignore
	node_modules/oae-authentication/lib/api.js
	package.json
Initial commit
Updated publications + CQL3 upgrade
Follow-up on review
Removed 'bla' from unit-test
Merge pull request #4 from Coenego/avocet-tickets-cql3

Avocet publications module + CQL3 upgrade
Avocet journals module

Importing journals is only enabled for global- and tenant admins. To import a set of journals, a `POST` request needs to be sent to `/api/journals/import`. The request must contain a `.CSV`-file where the first 'column' contains the name of the journal (e.g. "Academic Research"). The second and third column contain the "print ISSN" and the "electronic ISSN".

Since we want to use the journals for an autosuggest feature in the front-end, we registered a search endpoint. Searching for journals can be done using the `/api/search/journals` endpoint. The endpoint accepts the 'q', 'limit', 'start' and 'sort' parameters (e.g. /api/search/journals?q=academic&limit=10).
Follow-up on review
Follow-up on review
Follow-up on review
Merge pull request #7 from Coenego/journals-module

Avocet journals module
Added departments module
Follow-up on review