Factor out widget-specific options

This cleans up the API significantly, and reduces duplication.