Adds a HomogeneousViewport class that works like MixedViewport but
handles only children that have all the same height.
Converts ScrollableWidgetList to use that, so that we don't waste a
frame looking at the size of the contents each time we change size.
This allows a number of seemingly pointless double-pumps in the tests
to be removed.
Other changes that were necessary to support the above:
- RenderBlock now supports minExtent (think 'min-height' in CSS)
- RenderBlock now supports itemExtent (forces the height of each
child to be the same, so that the itemExtent passed to the fixed-
height scrollables are all authoritative instead of a source of
bugs when they don't match)
- RenderBlockViewport now supports horizontal scrolling
- improved the style of the isInfinite assert in box.dart
- fixed the position of a comment in mixed_viewport.dart
- added a test
- made the logic for how many items to show be more precise
Also, rename build_utils.dart to widget_tester.dart. These files are now named
for their most commonly used classes.
Finally, add a .analysis_options to silence the (intentional) analyzer warnings
in append_child_test.dart.