fasta.Fasta: extend collections.Mapping instead of dict

Extending dict isn't necessary to behave like a mapping object, and in fact
has some overhead since the Fasta object needlessly stores data that's set up
by the superclass. It was also necessary to override as many methods as
possible to avoid accidentally referring to the superclass's data.

Now, extend Mapping and fill in the important methods:

* __len__
* __iter__
* __getitem__

Everything else will be provided by the Mapping abstract base class, including
e.g. keys/iterkeys/viewkeys (Python 2) -> keys (Python 3).

Because of this, pyfasta now requires Python 2.6+.
records.py: use context managers for open() calls

It's an extra indentation level, but avoiding an explicit
file_obj.close() is nice.
split_fasta.py: use iterkeys instead of keys

2to3 converts dict.keys() to list(dict.keys()), which isn't necessary for
this usage.