Action Pack Variants

By default, variants in the templates will be picked up if a variant is set and
there's a match. The format will be:

```
  app/views/projects/show.html.erb
  app/views/projects/show.html+tablet.erb
  app/views/projects/show.html+phone.erb
```

If `request.variant = :tablet` is set, we'll automatically be rendering the html+tablet template.

In the controller, we can also tailer to the variants with this syntax:

```ruby
  class ProjectsController < ActionController::Base
    def show
      respond_to do |format|
        format.html do |html|
          @stars = @project.stars

          html.tablet { @notifications = @project.notifications }
          html.phone  { @chat_heads    = @project.chat_heads }
        end

        format.js
        format.atom
      end
    end
  end
```

The variant itself is nil by default, but can be set in before filters, like so:

```ruby
  class ApplicationController < ActionController::Base
    before_action do
      if request.user_agent =~ /iPad/
        request.variant = :tablet
      end
    end
  end
```

This is modeled loosely on custom mime types, but it's specifically not intended
to be used together. If you're going to make a custom mime type, you don't need
a variant. Variants are for variations on a single mime types.

/cc @dhh @josevalim