move WhenBuilder to internal as LegacyWhenBuilder, introduce WhenBuilder interface