Add timeout to stoplights

This will be used for calculating if red lights should move into the
yellow state.
Add color method to data store
Implement .red? and .green? in terms of .color
Add a yellow predicate method
Implement #run in terms of #color
Extract common color logic into base
Use #pipelined instead of #multi
Dynamically define forwarded methods
Move notification logic into #run_fallback
Clean up #_color
Merge branch 'master' into gh-9
Merge branch 'master' into gh-9
Remove method forwarding
Use more idiomatic JSON
Create Failure.from_json
Move DEFAULT_TIMEOUT into the data store
Move DEFAULT_THRESHOLD into the data store
Rewrite a lot of stuff

The overlapping methods between Stoplight, Light, DataStore, and
DataStore::Base motivated me to find a better solution. I'm happy with
how it turned out, even though it changed a bunch of methods.

The tests cover the interface, but not the actual implementation. None
of the tests make sure that things do what they're supposed to; they
just make sure that they return what they're supposed to.

All that being said, there are still a few things I'm unsure of:

-   I forward everything from DataStore::Base onto Light. That makes it
    super convenient, but I got tired of forwarding before. I don't know
    if I like it.

-   I changed a bunch of the method names. Some of them I think are
    clear wins, like "clear_all" instead of "purge". Others are more
    questionable, like "get_attempts" instead of "attempts".
Make some dynamically generated methods private
Remove private forwarded methods