Added EditListBox insertion logic and corrected Movie/MediaHeaderBox duration values

IsoFileContainerBox.trim_to_time_range() now inserts an EditBox/EditListBox
 with an entry that describes the effective content range of the trimmed
 MP4.

IsoSampleTableBox.AccessPoint now has a is_at_extent field to describe a
 point that it's at the start/end of the source content.

IsoSampleTableBox.get_access_points_for_range() is considerably cleaned up
 and sets the AccessPoint.is_at_extent field.

This was the first non-stream-instantiated box, which required some
 infrastructure.

 All boxes in the IsoBox hierarchy required addition of non-IsoInputStream
 constructors. In turn, removed the use of all reserved field member variables.
 All reserved fields are now skipped via skip_bytes() and written using
 new IsoOutputStream.put_zero_bytes().

 Many boxes had box caching logic added (and update() overrides)

Had to add logic to better handle timescales and timescale conversions.

 IsoMediaHeaderBox and IsoMovieHeaderBox now have
 set_duration (uint64 duration, uint32 timescale), handling the conversion
 of timescales. And get_duration_seconds() returns timescale-corrected
 float seconds.

 IsoFileContainerBox.trim_to_time_range() now properly differentiates
 between the movie timescale and the individual track timescales.

 IsoEditListBox now has set_edit_list_entry() that the movie time and track
 media time in arbitrary timescales and properly converts them to the
 timescales appropriate to the duration and media_time fields of an
 EditListBox entry.

 IsoEditListBox.string_for_entry() includes float-seconds, corrected for
 the appropriate timescales.

Tested mostly with B-AVC_MP4_MP_SD-03.MP4. vlc and quicktime now report
 the duration as the resulting clip duration (which they didn't before).