Review requested: Improve the semantics for Image.Size

Image.Size is used as the de-facto size in places like the Gtk backend ImageBox,
so in the absence of any other fixed size, it should return the default size if
there is one. This enables DrawingImage to give a preferred size to be used.

Since Image.Size will now return the default size, consumers should not depend on
it returning Size.Zero if there is no fixed size (it can still do so if there is no
default size). Instead, they should check the HasFixedSize property.