GeoJSON load performance

A good chunk of GeoJSON point loading time was because of the `toDataURL` call when assigning `BillborGraphics.image` (which previously only accepted string values).  Since `HTMLElement` instances support reference comparison, `ConstantProperty` now accepts then as valid values.  This allow us to assign a `canvas` directly to the `BillboardGraphics.image` rather than having to convert to a data URI.

This exposed another issue where setting `Billboard.image` to a `canvas` would cause a new texture to be created every time.  I fixed this by using the `canvas.id` property for caching purposes.  One drawback of this approach is that if two canvases have the same id property (or a blank id property) then they will be incorrectly cached.  However, it's well documented that while not required, all elements should always have a unique id.  One way to mitigate this if we want would be to not cache if the id is blank.

Finally, I also cleaned up some doc to mention the new functionality and also fixed the use of deprecated code in `viewerDragDropMixin`.

@shunter since you did the billboard/texture atlas refactoring a couple of months ago, can you take a look at this and make sure there aren't any problems with my approach.