Require a picture and caption on upload

Now we get to handling invalid uplods!

Again, you'll notice that I managed to mess up something that writing a
test caught. I had params.require(:picture).permit(:name, ...) instead
of params.require(:picture).permit(:caption, ...)

Writing these negative tests really helps.

In the controller, we now have a check that ensures the picture is
persisted before it redirects. otherwise we re-render the new picture
form.

We've also started adding some error handlers under neath of the form
field. I'll extract those soon.

e Please enter the commit message for your changes. Lines starting
Extract shared error renderer

Some people would put this in a helper. I, personally, prefer to keep as
much of my HTML as possible in partials as that means they're super easy
for a designer to work with. Yes it's a *touch* more verbose; but
keeping the html in the HTML is "worth it" in my opinion
Enable S3 Uploads

Uploading our images to S3 is the only way we can make things work on
Heroku.

This means you'll now need to have an AWS account and an S3 bucket to
upload images in development. We're using `dotenv-rails` to make loading
the ENV variables super easy.

Everything else is setting up your initializer to have the correct buckt
name and access credentials to upload your files. In the test
environment we want to just upload files locally; as uploading to S3 is
quite slow.