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.
I see that this ends up being the same as the logic in `BillboardVisualizer`, but perhaps for clarity it might be better to write it the same way.  E.g. 
```
if (show) { 
position = Property.getValue...
show = defined(position)
}
```