Updated I/O dox

See #680.

Done:
* Introduced dox-only concepts FormattedFileConcept, FormattedFileInConcept, FormattedFileOutConcept.
* Updated SmartFile dox.
* Updated BamFileIn/BamFileOut dox.

Todo:
* Document the other file formats (as soon as you review this PR).
* Document low-level I/O (e.g. VirtualStream)
* Make all read/writeRecord(record, context, iter, format) functions private as they are misleading (@weese is there a need for this lower layer?)
* Rename the SmartFile class as FormattedFile, as the name SmartFile is misleading (@weese do you agree?)
* Improve the dox for concepts (see #763).

I assign @rrahn but also @holtgrewe might want to have a look.
It seems to me that only the weird SeqFileIn provides readRecords. The other FileIn provide only readRecord. I think the signature of SeqFileIn's readRecord should be changed to accept a record. Such record could even be a C++11 std::tuple of references.