feat(*):#867 - start of templating rewrite

Completed:
    - Moved template HTML out of js file
    - File/module to handle template-related tasks
    - All UI-related features should still work

TODO:
    - try to avoid setting style attributes in js
    - don't blow up if a template element is omitted
    - caching to avoid frequent re-selections
    - comments in code
    - comments in default template file
    - ensure default template file is included with dist zip
    - unit tests
    - update docs
    - fall back to core mode if template doesn't exist
feat(*):#867 - fix overridden button case
feat(*):#867 - fix disable default dropzone case
feat(*):#867 - allow template items to be omitted

Except for:
    - qq-uploader-selector
    - qq-upload-list-selector
    - immediate child of qq-upload-list-selector

[skip ci]
chore(test/uploader-demo-jquery.coffee): remove listElement option from manual test file
feat(*): #867 - stop applying style attrs in js

Except for DnD module

[skip ci] - still need to fix unit tests
feat(*): #867 - stop applying style attrs in js

Forgot about drop processing graphic

[skip ci] - still need to fix unit tests
feat(*): #867 - make progress bar more flexible

[skip ci] - still need to fix unit tests
feat(*): #867 - fix delete/retry visibility

[skip ci] - still need to fix unit tests
feat(client/js/templating.js): #867 - descriptive error if tempalte can't be loaded
test(*): #867 - unit tests should be passing again

TODO: Make these tests better and write new ones
chore(Gruntfile): #867 - Make default_template.html part of build
feat(client/js/uploader.js): #867 - re-add dropActive classes opt

[skip ci]
chore(*): Rev version number to 4.0

[skip ci]
docs(client/html/default-template.html): #867 - header comments for integrators
docs(docs/api/options-ui,jmd): #867 - template option documentation
docs(client/html/default-template.html): #867 - more complete default HTML page
docs(docs/upgrading-to-4.jmd): #867 - upgrading page stub
feat(client/js/uploader.api.js): #867 - remove noise
fix(client/js/uploader.api.js): #867 - regression in getItemByFileId