Properly auto-shrink during size computation.

Previously we would only auto-shrink once we were already laid out. This meant
that we reported a much larger preferred height than we ended up using, which
caused funky layouts.

Also fixed issue with iconGap not being included in usedWidth/Height in
layout().