update calculated map properties on layer change

This recalculates zoom bounds and attribution when layers have changed (map is finished initializing, or 'ready' is called on a layer). Does this seem reasonably nice?

This would fix #308 and #317