RADAR-403: Changes for stream resource

1. Moves code into lib folder
2. Adds a list abstraction 
  - every push will stamp the entry with an autoincrementing id
  - options to read the list from the tailend from a given id, based on length, start id and end id
  - Option to trim the list based on a max length
  - publish any pushes to the same pubsub key
3. Adds a lock abstraction
  - supports acquire/release and expiry after some fixed time
4. Adds an id generator abstraction
  - Allocs incrementing ids
  - For the duration of the callback, another id generation is blocked.

/cc @zendesk/zendesk-radar

### Steps to merge
 - [ ] :+1: of the team

### References
 - Jira link: https://zendesk.atlassian.net/browse/RADAR-403

### Risks
 - Very low: None of the code is used, but watch for regression because of path changes.
In both *if (error)* tests in this function, we want to call lock.release() to reset the redis lock data, even when we then *throw new Error(error)* and subsequently crash.