Texture atlas

* Combines `TextureAtlas` and `TextureAtlasBuilder`. 
* Makes `TextureAtlas` and `BillboardCollection.textureAtlas` private.
* Removes `Billboard.imageIndex` and adds `Billboard.imageUrl` and `Billboard.image`.

For #1688.

The functions in `TextureAtlas` were changed to mimic those that were in `TextureAtlasBuilder` though it may be better to return promises. See the use of the `TextureAtlas` in `LabelCollection` which expects the callbacks to be executed before returning.


Yes, if you pass a string, it first treats it as an ID for checking if it's already in the atlas, otherwise it's assumed to be a URL.  Keep in mind we don't keep the canvas around in memory after it's uploaded to the texture atlas.  I guess we could make it so that a texture atlas can copy a subregion of another texture atlas into itself.