New function `setup()` that works like `create()` but assumes an existing, not necessarily empty, directory

As discussed. `create()` calls `setup()` and now also deletes the created directory upon failure.

Fixes #627.
Makes sense. Checks will be executed more than once, but this shouldn't matter. I've added two tiny improvements to `create_description()`; they are in separate commits and could be removed from this branch with little effort.