Initial commit for tickets module

Tickets are automatically generated when creating a publication. The publications module can still work independently from the tickets module. Instead of using dispatched events or public functions to generate a ticket, we register a `createPublicationListener` on initialisation of the `oae-tickets` module. This listener gets executed when a publication was successfully created (see `_createPublication` in the `oae-publications` api).

Example of a publication with an attached ticket:
```
{ id: 'p:camtest:gyHkMtt02s',
  createdBy: 'u:camtest:lyfyMFF02o',
  linkedContentId: 'c:camtest:ekQkfYtR2o',
  displayName: 'displayName A',
  publicationType: 'journal article',
  date: 1395947791321,
  authors: 
   [ 'random user A',
     'random user B',
     { tenant: [Object],
       id: 'u:camtest:lyfyMFF02o',
       displayName: 'random-user-x1lyzFtChj',
       visibility: 'public',
       locale: 'en_GB',
       timezone: 'Etc/UTC',
       publicAlias: 'random-user-x1lyzFtChj',
       picture: {},
       profilePath: '/user/camtest/lyfyMFF02o',
       resourceType: 'user',
       acceptedTC: 0 } ],
  openAccessType: null,
  issueNumber: null,
  pageBegin: null,
  pageEnd: null,
  profilePath: '/publications/camtest/gyHkMtt02s',
  linkedContent: 
   { tenant: { alias: 'camtest', displayName: 'Cambridge University Test' },
     id: 'c:camtest:ekQkfYtR2o',
     visibility: 'public',
     displayName: 'displayName A',
     description: '',
     resourceSubType: 'file',
     createdBy: 'u:camtest:lyfyMFF02o',
     created: '1395947791358',
     lastModified: '1395947791359',
     downloadPath: '/api/content/c:camtest:ekQkfYtR2o/download/rev:camtest:gJNkzKtA2s',
     profilePath: '/content/camtest/ekQkfYtR2o',
     resourceType: 'content',
     latestRevisionId: 'rev:camtest:gJNkzKtA2s',
     filename: 'paper.pdf',
     size: 895881,
     mime: 'application/pdf',
     previews: { status: 'pending' },
     signature: 
      { signature: 'e5d853bf47f054e33fd216b8ff4bc7149310728d',
        expires: 1395949500000,
        lastModified: '1395947791359' } },
  ticket: 
   { ticketId: 't:camtest:xyu1MKF03i',
     externalId: 'OA-57',
     tenantAlias: 'camtest',
     publicationId: 'p:camtest:gyHkMtt02s',
     createdBy: 'u:camtest:lyfyMFF02o',
     created: 1395947791376,
     lastModified: 1395947791376,
     status: 'pending' } }
```