Minor refactors.
Added support for S3 remote storage for production.

Squashed commit of the following:

commit 696e2ff667079363a800258c79daa022fc48586c
Author: Christo Buschek <crito@cryptodrunks.net>
Date:   Tue Feb 4 13:55:22 2014 +0100

    Minor edits.

commit b9579170515ef3f5ee792ee980dc8eb6326d9694
Author: Christo Buschek <crito@cryptodrunks.net>
Date:   Tue Feb 4 13:53:23 2014 +0100

    Handle uploads dependent on app environment.

commit 6b05b16b45d3513ec04e83ae38e0c9e99659ef4d
Author: Christo Buschek <crito@cryptodrunks.net>
Date:   Tue Feb 4 13:45:26 2014 +0100

    Added S3 remote storage.

commit 942609c8bf37ae9672221139f3c2301cde6550ee
Author: Christo Buschek <crito@cryptodrunks.net>
Date:   Tue Feb 4 13:03:49 2014 +0100

    Extracted local uploads into function.

commit 2fc87e015a101b92a656e0a7dc830ce2db362063
Author: Christo Buschek <crito@cryptodrunks.net>
Date:   Tue Feb 4 12:27:36 2014 +0100

    Extracted storage code into seperate module.