Sampled property extrapolation and improved DataSource defaults

This pull has two big changes.

1. `SampledProperty` and `SampledPositionProperty` now have 4 new properties each to control extrapolation.  (2 for forward in time, 2 for backwards).  The default is `ExtrpolationType.NONE`, meaning that the value is undefined when outside of sample range (which is a change from the old behavior of always extrapolating).  The two other types are `HOLD` (keep the first or last value) and `EXTRAPOLATE`.  Users can also provide a duration limiting how many seconds a property is extrapolated for before going undefined.  Support has also been added to CZML.
2. The other large part of this change is cleaning up how we evaluate properties in the visualizer and making sure that we always revert to the default value when a property or it's result is undefined.  This actually simplifies the visualizers quite a bit as well.  There's still room for more cleanup, but nothing that should cause a breaking change of any kind.
Yeah, we already do this in some places but not others.  I was also thinking about creating a defaults object (which I believe what cozzi does for GLTF) to put them all in one place.  Are we at all concerned that module scoping would provide a performance hit?  This stuff gets executed constantly.