Clean up attribution control

Do not use map.getLayers() anymore, but get layers from frameState.layersArray.
Hide attribution instead of DOM removal

The reasons are:

 - It minimizes DOM updates (most changes to the attribution are just toggling
   visibility, not the more expensive creation, insertion and removal of DOM
   elements)
 - The order of attributions remains stable as layer visibilities are toggled
   and the user interacts with the map