Handle collections correctly

Fix #132

Passing the collections parameter used to mean that the storage should
append its value to the URL or path. This was a leaky abstraction for
the reasons explained in #132.

The new behavior removes this meaning from this parameter. Vdirsyncer
now maintains a cache of discovered collections.

Also, section names are now validated more strictly, in order to avoid
problems with the status files' naming.
Invalidate cache when config changes
--force-delete is now a flag
Factor out _parse_old_config_list_value
Kill unnecessary arguments
Factor out caching logic
Clarify internal API borders
Automatically create missing collections
Fix Flake8