refactoring image storage and implementing S3 storage

part of #635
- in order to crystallise whether local storage module was correct it was easiest to implement S3 module
- config is currently only in development section
- implemented as a config option rather than a plugin, as discussed previously
- may want to restructure config depending on what other storage comes along
- the S3 bucket must have read permissions as the link is direct to the bucket
- turns on file upload hash to use as filename, rather than use incremental filenames as in local storage, because each file stored in S3 is cost, so don't want duplicates
- error handling still needs some work
- used aws-sdk for S3 interaction because:
	- it is by Amazon
	- it is active
	- it has all AWS services
	- it has built in retries
	- I have used it since early versions with no issues