* Add tiny Bash wrapper to check for Node before attempting to execute Heroku release script
* Use the wrapper script for the Heroku release command
* Be explicit about exiting with Node's exit code
* If Node is missing, exit using that script's exit code
* Use [node-]redis as a direct dependency
* Extract Redis client creation to its own module
* Attach extensive logging in the Redis client creation module
* Allow the rate limiter to pass requests when Redis is disconnected
* Update rate-limit-redis
* Default error input to empty object for formatRedisError method
* Provide a name for the rate limiter's Redis client
* Include redis-mock, exclude ioredis/ioredis-mock
* Remove unused RedisAccessor#exists method
* Switch RedisAccessor to use redis/redis-mock
* Provide a name for logging on the Redis page cache
* Remove extraneous trailing space from Redis logging prefix
Our updated use of console.* will already be adding a space after the prefix
* Replace ioredis-mock with redis-mock in tests
* Revert removal of ioredis dependency
* Bind Redis client to async promisified methods
* Extract former RedisAccessor constructor tests to new create-client tests
* Update RedisAccessor tests to work with the callback-based redis client
* Handle formatting Redis errors (or not) with more resiliency
* Remove ioredis as a dependency
* Update Redis soft-purging script to use node-redis
* Do more promisifying for less ugly code
* Add comment explaining TTL of -1
* Make the script executable
- add `script/test-render-translation.js` to render all translated content to catch malformed liquid that would cause render errors
- improve test output for `script/fix-translation-errors.js` and `tests/content/lint-files.js`
- make it so `script/reset-translated-file.js` can handle files that have been renamed
* Install throng for easy cluster management
* Extract the Express app construction into its own file
* Switch server.js to use app clustering for deployed environments
* Worker count is based on the lesser of process.env.WEB_CONCURRENCY and the count of CPUs
* Reading clustered output is difficult, let's prefix the std{out,err} streams
Co-authored-by: Jason Etcovitch <jasonetco@github.com>