F-Bounded Polymorphism: Type-Safe Builders in Java