Refactor detection into strategies

This is an an attempt to simplify `Language.detect`, make it easier to understand, and easier to test. This is not ready to merge (tests don't even pass), but I wanted to put it out there to see what people thought about the approach.

Each step of the detection is extracted to a "strategy". A strategy is just an object with a `#call` method that takes `blob` and `languages` (an array of possible languages).  The strategy returns an array of languages (candidates to be used by the next strategy). It continues to try strategies until 1 language is detected, at which point it returns and does not try the remaining strategies. 

If we like this direction, then there's still work to be done, like tests for each strategy.
From the code it seems to be language at the state `n-1` (the comment should probably be updated).
I think it's better that way because even if the strategy number `n` can't find candidates, the results from the strategy `n-1` are still valid.