If the layout isn't prepared, then prepare it when it's about to be used

In UICollectionView, you can ask for the layout size, etc, when the layout isn't fully loaded yet. This fixes that by always loading in the various methods if _data isn't set yet (i.e. the layout isn't prepared yet). Also need to clear _data in invalidateLayout to make this work, but also, that should be done anyway.