use string find() instead of index().  Fixes #880.

We're expecting a non-match to return -1, which is what find() does,
but index() instead throws a ValueError.
Ensure that markup is a tuple.

`self.markup` is a list when using the `-m|--markup` cli option, but testing the
extension with `endswith` works only with tuples.
utils: Add some ISO 8601 forms to get_date()

Support the forms listed by the W3C [1].  I also removed the
'%Y-%d-%m' form, which can be confused with the '%Y-%m-%d' ISO form.
The new ISO forms can use 'Z' to designate UTC or '[+-]HHMM' to
specify offsets from UTC.  Other time zone designators are not
supported.

The '%z' directive has only been supported since Python 3.2 [2], so if
you're running Pelican on Python 2.7, you're stuck with 'Z' for UTC.
Conveniently, we get ValueErrors for both invalid directives and
data/format missmatches, so we don't need special handling for the 2.7
case inside get_date().

[1]: http://www.w3.org/TR/NOTE-datetime
[2]: http://bugs.python.org/issue6641
utils: Use pytz instead of datetime.timezone for timezones

datetime.timezone is new in Python 3.2 [1], so pytz allows us to keep
support for Python 2.7.

[1]: http://docs.python.org/dev/library/datetime.html#datetime.timezone
readers: Instrument read_file to return Content objects

The assorted generators all use read_file() to read in the file
contents and metadata.  Previously, they sometimes parse additional
metadata, fire off signals, and initialize a pelican.contents.Content
subclass on their own.  We can reduce duplicated code and increase
consistency by shifting all that stuff into read_file() itself, and
this commit is a step in that direction.
readers: Add debugging logging to read_file
readers: Log signal sending for read_file()
signals: Sort signals into categories
signals: Add missing signals

Note that the `pages_*` names are plural , while the `article_*` names
are singular.  I'll fix this once I update the PagesGenerator.
signals: Fix *_generate_* signals -> *_generator_*

For example, article_generate_preread is now article_generator_preread
for consistency with the other preread and context signals.
Move Article metadata extraction from generators to readers

There's no reason why this information should be Article-specific.

This commit breaks the other generators for the moment.  I'll fix them
shortly.
generators: Update PagesGenerator to use new read_file

Also standardize signal names.  If `article_generator_*` is singular,
`page_generator_*` should be as well.  Fix it from the older
`pages_generator_*`.
generators: Convert StaticGenerator to use the new read_file
Remove the FILES_TO_COPY setting

We no longer instantiate the Static object in the StaticGenerator, so
we can't set the save_as argument anymore.  If you want to adjust the
output path, use the upcoming EXTRA_PATH_METADATA setting.
Add the EXTRA_PATH_METADATA setting

Useful for altering static output paths when you don't want to encode
extra metadata in the static file's source path.
Update sample configurations from FILES_TO_COPY to EXTRA_PATH_METADATA
test_readers: Update to new readers.read_file
test_generators: Replace CUR_DIR with CONTENT_DIR for subdir cat. detection

In situations where I've cleared ARTICLE_DIR, I've done so to ensure
that there are no directories that will override the DEFAULT_CATEGORY
due to USE_FOLDER_AS_CATEGORY.
contents: Page fallbacks for context and localsiteurl
content: Don't update static content