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.