Cache config values as they're read.  Prior to this change, Rubber walked
its entire in-memory config to resolve a config value each time it was read.

require 'benchmark'

Benchmark.bm do |x|
  x.report("hash") { 100_000.times { Rubber.config['screenshot_bucket'] } }
  x.report("method") { 100_000.times { Rubber.config.screenshot_bucket } }
end

Before:

       user     system      total        real
hash    7.300000   0.010000   7.310000 (  7.304000)
method  7.270000   0.000000   7.270000 (  7.276000)

After:

       user     system      total        real
hash    0.090000   0.000000   0.090000 (  0.092000)
method  0.170000   0.000000   0.170000 (  0.171000)

This is obviously a bit contrived in that other values are apt to be read, but
it shows the improvement made to continuously reading the same value.