Merging wip segmented mp4 time-seek support and scaled MP4 media file support

 The support for scaled (non-segmented) MP4 media files was intermingled with
  some of the segmented mp4 time-seek support. So having to merge these together.

 A new resource property, "speed-files-scaled", controls whether the scaled
  versions of the content files (for PlaySpeed support) are considered
  pre-scaled or are decimated/augmented (and have a corresponding "framerate"
  parameter in the scaled file .info resource file). Currently this is only
  supported for MP4 files, however. (we'll need to add support for the
  DLNA-provided index files to use their scaled non-MP4 files)

  Fixed an issue with the time range end calculation in IsoSampleTableBox.
   get_access_points_for_range(). The range end needs to be beyond the sample
   containing the time range end. This issue isn't related to the scaled
   media support, but was exacerbated by it - esp for high-rate content files.

  Fixed an issue with a number of functions in IsoSampleToChunkBox related to
   the last entry. Apparently, the last entry applies to any/all samples that
   follow. The code was assuming that the last entry could only describe 1
   chunk. (this was getting triggered by the scaled DLNA content files which
   had tracks with only 1 entry)

  Because of the change to IsoSampleToChunkBox, had to fix an assumption in
   IsoSampleTableBox.access_point_offsets_for_sample(). The logic was assuming
   it could fence sample values via the SampleToChunkBox entries. But looking
   at the ISO BMFF spec, the SampleSizeBox is the authoritative source for the
   total sample count (per 8.7.3.1). So this function now uses the sample count
   from the associated SampleSizeBox to fence in the sample values.

  Tested with the various DLNA-provided O-AVCMP4_BC15A-02 scaled content files
   (the only non-segmented MP4 container provided currently) with various
   PlaySpeed and TimeSeek values.

  Implemented IsoTrackFragment.get_random_access_points (). This deals with the
   variety of ways that the base offset for the sample runs can be specified
   and accommodates the accounting of time offsets across IsoMovieFragments/
   IsoTrackFragments.

  Implemented IsoTrackRunBox.get_random_access_points (). This deals with the
   different ways that a sample can be identified as a "sync sample" (via the
   TrackExtends defaults, TrackFragmentHeader, and the run's first-sample
   flags. This function also deals with the variety of ways that sample size
   and sample time can be specified.

  Changed existing AccessPoint logic to use uint64s for time offsets and to
   allow a timescale to be provided by the caller.

  Implemented IsoFileContainerBox.get_track_for_time()

   This will find the IsoTrackBox or IsoTrackFragmentBox that contains the
    target media time and will be the first level of delegation for performing
    the time range selection on the fragmented movie.

   Also added an IsoMovieBox.get_primary_media_track() to centralize the logic
    for identifying the track that should be used for movie duration time
    calculations. Changed existing logic to use this function.

  Added a "-print track-for-time [time-val]" option to the test program and
   performed tests using B-AVC_MP4_MP_SD-01.MP4. Confirmed that the correct
   IsoTrackBox/IsoTrackFragmentBox was returned for various time values.

  All get_*_duration methods in IsoFileContainerBox take a flag to consider
   edit list boxes in the duration calculation.

  Added get_track_fragment(track_id) to IsoMovieFragmentBox.

  Added logic to check for edit boxes when doing duration calculations.

  Simplified checking for box loading with IsoBox.check_loaded(). Replaced
   all "if (!loaded)" checks with calls to this method and added new checks -
   which caught a few bugs.

  Moved timescale conversion logic in IsoMediaHeaderBox into their own methods
   so the IsoTrackFragementBox can take advantage of it for timescale
   conversions.

  Added support for unspecified MovieHeaderBox durations (which is allowed by
   ISO BMFF spec). It now will calculate a movie duration based on the samples
   when no duration is present.

  Added EditListBox duration calculation (to determine the duration of a
   Movie based on the edits instead of the samples).

  Setup IsoTrackRun/IsoTrackFragment/IsoTrackExtends box relationships and logic

  Added TrackRunBox/TrackRun duration and size calculation logic & caching
   (which utilizes the conditional default sample duration/size logic).

  Added a IsoBox.get_root_container() method since the fragment logic needed
   to navigate back up to the MovieBox.

  IsoContainerBox.children_to_string() no longer stringifies all the children
   by default.

  Added a loaded check to IsoBox.flags_set(). This should catch a bunch of
   cases where flags are being checked on unloaded boxes. (but added a _loaded
   version for cases where the check is done prior)

  Replaced all uses of Error with IsoBoxError where possible.

  Added IsoMovieFragmentBox (moof), IsoMovieFragmentHeaderBox (mfhd), IsoTrackFragmentBox (traf), and IsoTrackRunBox (trun)

  Added IsoMovieExtendsBox (mvex), IsoMovieExtendsHeaderBox (mehd), IsoSampleFlags, and IsoTrackExtendsBox ()

  Added some missing documentation to IsoBox (as I had to remind myself).

  Reduced the buffer size in IsoBox.write_from_source(). 8K is way faster
   than 500K in testing.

  Added optional "level" param to test program's "-print outfile" option.

Tests were run with a variety of content files. But CTT/LPTT hasn't been run
 against the down-merged branch.