Started to make image upload class, make things cleaner
Finished Refactor!
Q is harder to use than expected,

- Different behaviour between done and then,
- Cannot chain after deferred.reject and done
- No documentation about Q.reject and Q.resolve, which is different from deferred.reject and resolve
- Coming from jQuery, expect defer to be a subclass of Promise, but why not?
- Throw rejected promise instead of recording them when function is not ran inside Q
- Q sometimes catch exception and silent it, whichs make debug difficult
Fixed a bug where data continue to upload after error occurred, causes server to upload wrong data to s3
Merge branch 'imageuploader'