Refactor Quick to mixin Strategy
Refactor to use subclass template class

-> before

Auto extend Strategy module based on strategy param passed in,
which has the override issue. like

```ruby
module M1
  def foo; puts 'foo from M1'; end
end
module M2
  def foo; puts 'foo from M2'; end
end

class Quick
  class << self
    def sort_by(mod)
      self.class_eval{ extend mod }
      foo
    end
  end
end

Quick.sort_by M1 # => foo from M1
Quick.sort_by M2 # => foo from M2
Quick.sort_by M1 # => foo from M2, WRONG!
```

Same for the instance method version.

```ruby
class Quick2
  def sort_by(mod)
    self.class.class_eval{ include mod }
    foo
  end
end

Quick2.sort_by M1 # => foo from M1
Quick2.sort_by M2 # => foo from M2
Quick2.sort_by M1 # => foo from M2, WRONG!
```

We can conclude that no duplicate modules can be included or extended.

--> after

Use the sub-class version.

```ruby
class QuickByDefault
end

class QuickByThreeWay
end
```
Change back to pass block to less
TDD on QuickByThreeWay