3.0 multicheckbox

Part of #2267. This adds support for multicheckboxes. The old code is still kicking around and will be removed separately once datetime() and friends are fixed which is my next task.

I've split out a trait that helps widget classes generate ID's in a consistent way. I thought this approach was cleaner than using inheritance or a base class, but I'm open to reconsidering that decision.