Memoize uploaders and uploader_options

Profiling an app revealed that these two methods were called alot, and
every time they merged in their superclass's options/uploaders. This
change ensures that we only dup once or return an empty hash and memoize, instead of
merging in an empty hash every time in order to dup.

This ends up saving a lot of computation cycles and memory, since we are
only creating a copy of the hash once, as opposed to every time these
methods are called.