Well if that is indeed an open question, then by definition we don't know the answer to #1. The design spaces are pretty different, and it isn't obvious to me how you might directly encode subtyping into constrained polymorphism. The encoding is direct when the arguments are polymorphic. For example, a Haskell function with type
foo :: (Num a) => a -> Bool
is equivalent to, say:
Bool foo(Num x)
in an OO language. However it is not clear how to encode:
// I will return some Num, but I'm not going to tell you what kind exactly
Num bar(Bool x)
into constrained polymorphism, nor is it clear how to encode:
-- I can return any kind of Num, *you* tell *me* what kind
bar :: (Num a) => Bool -> a
into subtyping.
My best guess for #2 is that Scala has to talk to Java, and Java talks about subtyping. And because Scala has every type system feature known to man because it thinks it has to in order to be cool. :-P