Added IsoDataInformationBox
Added IsoSampleTableBox.get_random_access_points() and supporting logic

IsoSampleTableBox.get_random_access_points() produces a list of random
 access points with time and byte offset information using the
 IsoTimeToSample box, IsoSampleToChunkBox, and IsoChunkOffsetBox.

The implementation of this function required supporting methods in various
 box types:

 General box navigation via IsoBox.get_ancestor_by_level/class/type_code() and
 get_descendant_by_class/type_list().

 Added numerous convenience accessors for boxes which are structurally
 required by ISO BMFF. (e.g. IsoFileContainerBox.get_movie_box()/
 get_first_track_of_type()/get_all_tracks_of_type and IsoTrackBox.
 get_header/media/sample_table/_box())

 Implemented IsoTimeToSampleBox.sample_for_time()/time_for_sample() to
 operate on the compressed sample table.

 Implemented IsoSampleToChunkBox.chunk_for_sample() to operate on the
 compressed chunk run table.

Tested with a couple (non-fragmented) mp4s. confirmed byte offsets map
 into the expected positions in the mdat box.