general: legacy directory pre-creation

* Ensures legacy directories are pre-created
  upon legacy extension setup_app() call.
  (closes #1789)

Signed-off-by: Samuele Kaplun <samuele.kaplun@cern.ch>
Hard to find ~~a good~~ __any__ example in our code...
- https://github.com/inveniosoftware/invenio/blob/pu/invenio/base/utils.py#L44-L67
- https://github.com/inveniosoftware/invenio/blob/pu/invenio/ext/template/__init__.py#L152-L155
- https://github.com/inveniosoftware/invenio/blob/pu/invenio/modules/upgrader/commands.py#L116-L120
- https://github.com/inveniosoftware/invenio/blob/pu/invenio/modules/upgrader/engine.py#L288-L307 exceptions as a control flow...
- ...

> `Logger.error(msg, *args, **kwargs)`
>    Logs a message with level `ERROR` on this logger.
> `Logger.exception(msg, *args, **kwargs)`
>     Logs a message with level `ERROR` on this logger. Exception info is added to the logging message. This method should only be called from an exception handler.

In practice, they are identical, same error level. I don't see the benefit of using `.error` in a `try...except` scenario. You're losing from where the exception was raised.