Handle cases when MEDUSA_URL_PREFIX isn't set
Move batch-processing/generate logic into BaseStaticSiteRenderer

Most of these are duplicated across the various StaticSiteRenderer classes,
which makes it rather hard to patch the default behaviour. This deduplicates the
code from the various .generate() implementations into a single base class,
allowing render_path() to be overridden easily while still retaining the
MEDUSA_MULTITHREAD logic.
Move some of the render_path() logic into BaseStaticSiteRenderer

The django.test.client and output path generation logic is common across all the
renderers. This commit only updates DiskStaticSiteRenderer, the others will be
ported in coming commits.
Factor directory index file name derivation into separate method

This allows us to override it in derived renderers, e.g. in the S3 renderer when
we need to force everything onto index.html.
Move _s3_render_path into S3StaticSiteRenderer.render_path
Move _gae_render_path into GAEStaticSiteRenderer