Select2 4.0

Select2 hasn't had any major releases for a few years, which has limited the
scope of the improvements that we have been able to make.  Select2 4.0 aims to
be a total rewrite and reorganization of the code base.  This document is not
set in stone and will change as work progresses.

**This pull request is a work in progress.** The checklist will be updated as things reach a state of completion, and new items will be added as we decide what features will be migrated.

Repository
==========
- [x] **Add a new `dist` folder.**
    - This will include two subfolders, `js` and `css`, that will contain
      compiled versions of Select2's CSS and JavaScript.
- [x] **Include copies of dependencies within the repository.**
    - Copies of jQuery and any other dependencies will be included in the
      `vendor` folder.
- [x] **Switch to a task runner**
    - Something like Grunt or Gulp, which are JavaScript-based.
    - It will allow for a system-independent updater to be created.
- [x] **Move all source files into a `src` folder**

Documentation
=============
- [ ] **Update documentation** to Bootstrap 3
- [ ] **Include documentation on the `master` branch**
    - This will prevent confusion for users who do not realize it is on the
      `gh-pages` branch.
    - This will also include the documentation in releases, so users do not
      have to always access it online.
    - Documentation will be versioned alongside Select2.
- [ ] **Split documentation across multiple pages**
  - Integrations
  - Contributing
  - Initialization options
  - Examples

CSS
===
- [x] **Compiled stylesheets via SASS** (SCSS syntax)
  - Allows for variables to be used for easy customization
- [x] **Split up the CSS** into separate components
  - Multiple small files that can be compiled into one main stylesheet.
- [ ] **Create mixins for commonly repeated styles**
  - This will allow us to update prefixes for properties as they stop being
    supported by major browsers.

JavaScript
==========
- [ ] No longer stop all events from leaving the Select2 container [https://github.com/ivaynberg/select2/issues/2345]
- [ ] Allow for custom pagination styles
- [ ] Support `<select>` for as the primary base element
  - Backwards compatibility with `<input />` elements may still be
    maintained, through additional modules.
- [ ] Full test suite
  - This will allow us to ensure that future changes do not break features.

Core Modules
============

Container
---------
- [ ] Custom templating
- [ ] Placeholders
  - [ ] Selected options can be cleared

Results
-------
- [ ] Custom templating
- [ ] Custom matcher
- [ ] Custom sorting
- [ ] Diacritics support

Data sets
---------
- [x] Standard data sets
- [x] Array data sets
- [x] AJAX data sets
  - [ ] Delayed searching / debouncing
- [ ] Options can be added on the fly (tagging)

Backwards compatibility
=======================
- [ ] Maximum selections
- [ ] Minimum search length
- [ ] Maximum search length
- [ ] Minimum results for search
- [ ] Tokenization
- [ ] Next search term
- [ ] Custom data set (old `query` function)

Miscellaneous
=============
- [ ] Full WAI-ARIA support [https://github.com/ivaynberg/select2/issues/2499]
- [ ] Transparent support for mobile devices