Add .gitignore
Add custom configurable caching.

If the cache property is set to the boolean value 'true' then it defaults to the old behavior of caching via memjs.
If the cache property is an object with get(key, cb(err, result)) and set(key, value) functions then that will be used to cache requests.
This should allow caching of requests in an arbitrary system (e.g. Redis) as well as supporting custom cache TTLs and expirations.
Fix crypto to use a unique IV for each call to encrypt()

This patch deletes lib/encryptor.js and replaces it with the module simple-encryptor to use a unique IV for each request.
Previously lib/encryptor.js was using crypto.createCipher(algorith, stringKey) where it should have been using crypto.createCipheriv(algorith, keyBytes, ivBytes).
This means that repeatedly calling encrypt(...) with the same plain text would give them same encrypted result.

The encrypt/decrypt API for simple-encryptor matches up 1:1 with the original lib/encryptor.js, only the return values are different as they actually include IVs now (still utf-8 strings though).
Rather than throwing an exception on bad input, the decrypt(...) function now returns null.
The request.js code that calls it can treat that situation as a cache miss.

Simple-encryptor supports storing/retrieving arbitrary objects so the JSON.stringify(...) and JSON.parse(...) calls have been removed from getCache(...) and setCache(...).

The getCacheKey() function in request.js was using the old encrypt(...) function to generate a caching key based on the path/range/token of the request.
This only worked because the IV was not being used (so all encrypt(...) calls return the same value).
As each invocation of encrypt(...) now returns a unique result (due to the random IV), getCacheKey(...) has now been changed to use the hmac(..) function instead.
Additionally, the path key itself that is passed to the hmac(...) function has been changed to be a stringified JSON array of the path/range/token.

By default simple-encryptor computes and adds an HMAC to the encrypted result (i.e. "encrypt then mac").
The HMAC adds 64 bytes to each result (32-byte hash stored as hex).
You can optionally disable it by setting {hmac: false} in the call to Heroku.configure().

Additionally, you can now pass the encryption key to use as an option to configure.
This is done to allow using a value of a differently named environment variable (than HEROKU_CLIENT_ENCRYPTION_SECRET) as the encryption key.