feat(*): #868 - start of browser image preview generation

TODO:
    - Properly orient previews? (must parse EXIF Orientation)
    - Create & place stock "preview not available" images
    - API method that takes an <img> (or <canvas>?) & file ID
    - Gallery template
    - Allow easy substitution of placeholders per MIME
    - Investigate preview latency on Android 4
feat(*): #868 - more thumbnail-related progress

- Simple EXIF parser for JPEGs to orient previews correctly
- Restrict size of previews via canvas, qq-max-size attr cue
- iOS & Android support (as well as all modern desktops)
- simple previews template
- reorg of provided default templates
- identify DataViews as arrays

TODO:
    - fix quality issues at some sizes
    - Identify previewable files before attempting preview
    - "not available" and "preview generating" stocks
    - API method
    - Allow thumbnail from server (url in response)
    - unit tests
    - docs

[skip ci]
feat(*): #868 - Fix non-JPEG previews

[skip ci]
feat(*): #868 - Identify/verify before attempting preview

[skip ci]
feat(client/js/preview.js): #868 - fix iOS preview display, again

[skip ci]
feat(*): #868 - iOS subsampling issues solution

Delegate to stomita's MegaPixImage library.

[skip ci]
feat(client/js/third-party/megapix.image.js): #868 - same CPU cycles on non-iOS

[skip ci]
feat(*): #868 - comments & cleanup of preview code

[skip ci]
test(test/unit/util.js): #868 - isArray test for DataViews
chore(*): #868 - comments
test(*): improve test reporting?
feat(*): #868 - getThumbnail API method

The name is generic enough so it should be able to
generate a client-side preview or eventually use any
image url returned by the server (especially for IE9 and older)
fix(client/js/templating.js): #868 - don't blow up if img is omitted in template
feat(client/js/templating.js): #868 - max size should be optional
feat(*): #868 & #869 - thumbnail replacement based on server response
chore(client/js/image.js): #868 & #869 - cleanup
feat(*): #868 & #869 - Allow client-side or server-side generated thumbnail to be obtained via drawThumbnail method
chore(Gruntfile.coffee): grunt-version build task is actually a prerelease

To change the build number, in the future, we must specify
a version literal when running the version task, like this:

grunt version::4.0.0+1
Revert "chore(Gruntfile.coffee): grunt-version build task is actually a prerelease"

This reverts commit 6c38e0c5cab93e97a1e2eaa7861e3f8001088d02.
chore(test/fineuploader/UploadReceiver.java): ensure response encoding is UTF-8