Make asset uploads pluggable via adapter.

We want to support different types of asset uploads not
just s3. Added an adapter layer to make it possible to
add different asset uploads.

* add adapters layer for asset uploads.
* add s3 adapter.
* add tests for s3 uploads.