Simplify use of promises in queue.js

Also create bound versions of methods on Queue.prototype on each
Queue instance so they can be easily used in promise chains.
Rename: job.complete() -> moveToComplete, job.failed() -> moveToFailed

For easier reading of the code.
Also change job._done() to job._moveToSet() as that method is moving
a job to a destination set.
Fix broken test in test_queue.js

The queue.add operation was setting the job id in the outer scope
for the process() function to compare it against the processed job's
id later in the test. This was relying on the .then() clause being
executed before the handler - which was causing a race condition.
If the .then() clause could not set the variable in time, it would
remain undefined, therefore making the id equality assertion fail.
This would end the test early with a call to done() therefore starting
the following tests. It would then take another 100ms before
setTimeout() would call jobDone(), which would trigger 'complete',
which would in turn close `anotherQueue` - which in the meanwhile
would be processing jobs sent to the queue. This would cascade down
to the following tests since they all use the same queue name.
With this fix the test is finished only when the first queue has
finished executing and the second queue is closed.
Remove caret (^) dependencies from package.json

Use tilde (~) instead which is compatible with npm 1.2 - the only
version which at the moment works with node 0.8 on travis-ci
Add .editorconfig and use it on all project files
Queue.prototype.add now returns a promise

It is resolved when both the redis connections have been successfully
closed and rejected after a configurable timeout, set at 5000ms
Don't instantiate queue twice in tests

A new queue instance was being created before each test in test_queue
Some tests would then create additional instances before executing.
This commit makes sure each tests instantiates only as many instances
as it needs and that each instance is closed afterwards.