Fixed issues related to end boundary conditions with non-segmented MP4s

Changed IsoSampleTableBox.AccessPoint to have a "is_at_start/end" to allow
 an AP to express being at the very start/end of its range and code to set/
 check it. (more work is required to set/use this in 100% of cases, however)

Improved the IsoSampleTableBox.access_point_offsets_for_sample(),
 access_point_sample_for_byte_offset(), and access_point_chunk_for_sample()
 end-range logic. In all these cases, if the passed AccessPoint's sample
 is beyond the range of available samples, these now set the AccessPoint's
 chunk to the last chunk with samples_into_chunk and bytes_into_chunk
 referring to the byte immediately after the end of the last chunk. This
 reduces the special-case logic required for the trim_to_time_range()
 logic.

Identified some redundant/inefficient logic in IsoSampleTableBox.
 remove_sample_refs_after_point(). This was

Fixed a bug in IsoChunkOffsetBox.remove_chunk_refs_before (). It wasn't
 checking the chunk number against the array length correctly.

Ran a variety of range tests against DLNA (non-segmented) reference streams
 with npt=0-n, n-m, and n- range tests. Only observed issue was a slight
 rendering issue with bbb_avc-main_720x576i50_2M_heaac51_48kHz_160kbps.mp4.
 mp4s produced using non-0 range starts are rendering with momentary
 pauses in VLC. Confirmed this is happening prior to these changes as well,
 however. Will investigate the issue with this file separately.