generators: Avoid including the same content twice

Check against context['filenames'] in Generator._include_path() to
decide if we've already seen the source file.
content: Add space in is_valid_content NameError message

This fixes:

  impossible to find informations about'title'

Now you get:

  impossible to find informations about 'title'
readers: Add debugging logging to read_file
readers: Log signal sending for read_file
signals: Fix *_generate_* signals -> *_generator_*

For example, article_generate_preread is now article_generator_preread
for consistency with the preread and context signals.
docs: Group template-rendering settings together for easy comparison

Also add an explicit description of the difference between
TEMPLATE_PAGES and DIRECT_TEMPLATES.
generators: Fallback to Page content class

If a generator-specific content class doesn't exist in
pelican.contents, fallback to Page.
generators: Extend ContentGenerator._generate_direct_templates docstring

Explain why this generator cannot be split away from ContentGenerator.
generators: Make TemplatePagesGenerator a ContentGenerator subclass
generators: Setup context['filenames'] in Generator.__init__

This ensures that the dict exists so we can use it in
Generator.add_source_path(), etc.

This preserves a single global filenames store because we're assigning
the new dict to the shared context; if a set of generators shares a
context, only the first one will create the fallback dict.
generators: Convert TEMPLATE_PAGES to TEMPLATE_PAGE_PATHS

This makes the handling of template pages very similar to the handling
of static pages.
generators: Add UnparsedContentGenerator subclass

This unifies content processing between StaticGenerator and
TemplatePagesGenerator.
generators: Add direct templates to context['filenames'] for linking

This lets you use the `|filename|SOURCE_PATH` syntax to link to direct
templates.
contents: Teach Page._update_content's replacer() to ignore fragments

The `value` portion of the regexp might contain query and fragment
portions as well as the path to the target.  Use urlsplit to isolate
the path, so we don't get errors like:

  WARNING: Unable to find .../index.md#section-1, skipping url replacement