WIP refactoring for segmented trimming logic

IsoMovieContainerBox.trim_to_time_range() now properly accounts for the
 MovieBox coming after the mdat (and not adjusting the chunk offsets for
 the reduced header size).

Added IsoBox.precedes()/follows()/immediately_precedes(),
 and immediately_follows(). And added backing logic IsoContainerBox.
 box_before_box() and box_immediately_before_box().

Confirmed that recent timerange test cases are still producing valid mp4s.