WIP more refactoring to deal with trimming fragmented IsoFileContainerBox

Refactored IsoFileContainerBox.trim_to_time_range() MovieBox logic into
 trim_movie_to_range(). This new function does the MovieBox trimming and
 returns the number of bytes trimmed (which the segmented logic will need
 to use to adjust the MovieFragment/mdat's that follow.

Removed time reference values from IsoFileContainerBox.trim_to_time_range().
 The time offsets are in the IsoAccessPoints. So the time range params
 didn't need to be in-out.

Robustified the IsoFileContainerBox.trim_movie_to_range() logic to deal
 with the start value being beyond the end of the MovieBox's sample range
 - including deleting the entire mdat (and adjusting the movie_bytes_removed
 value accordingly.

Added IsoFileContainerBox.get_random_access_points () to use for modeling
 the fragment removal time logic.

Added IsoAccessPoint.get_timescale()/get_track_id() to support above work.

Adjusted the test program to deal with the changes to IsoFileContainerBox.
 trim_to_time_range() and get_random_access_points().

Did spot testing with non-fragmented and fragmented files
 B-AVC_MP4_MP_SD-03.MP4 and /B-AVC_MP4_MP_SD-01.MP3.
WIP changed IsoFileContainerBox.trim_to_time_range() to deal with start/end IsoAccessPoints

Realized that the start/end AccessPoints really need to be handled
 independently to sanely deal with all the cases where start
 may be in the MovieBox samples and end may or may not.

Added IsoFileContainerBox.get_random_access_point_for_time(). This walks
 the list from get_random_access_points() and returns the nearest-preceding
 IsoAccessPoint.

Added IsoFileContainerBox.get_access_point_for_time(). This returns the
 nearest sample for the given time in the MovieBox TrackBox or TrackFragment.
 Added IsoSampleTableBox, IsoTrackFragmentBox, IsoTrackRunBox
 .access_point_for_time() to support the functionality.

The IsoAccessPoint modifications made some revisions back mean that timescale
 no longer needs to be passed to functions that set access points (since the
 APs now can be used to establish the timescale of the time_offset field).

Implemented IsoMovieBox.remove_samples_before_point() and
 remove_samples_after_point(). This is essentially the functionality from
 remove_samples_outside_range(), which should be deprecated when this
 refactoring is complete.

IsoFileContainerBox.trim_to_time_range() is currently non-functional. But
 confirmed that expected AccessPoints are being found in the new logic.