In general, we should provide typed methods when possible and with_type variants.
Example: Widget::ancestor(widget, type) (which currently returns a Option<Widget>) could become Widget::ancestor::<gtk::Label>(widget) and directly return a typed Option<Label>.