model: generalize MType::lookup_bound

Signed-off-by: Jean Privat <jean@pryen.org>
model: add MVirtualType::lookup_single_definition

Signed-off-by: Jean Privat <jean@pryen.org>
model: MParameterType::lookup_bound works for the easy case

Signed-off-by: Jean Privat <jean@pryen.org>
model: MVirtualType::resolve_for do not resilve self is cleanup_virtual is not set

Signed-off-by: Jean Privat <jean@pryen.org>
model: add MType::lookup_fixed

Signed-off-by: Jean Privat <jean@pryen.org>
model: improve  MType::is_subtype for formal types

Signed-off-by: Jean Privat <jean@pryen.org>
tests: add base_formal_subtype.nit

Signed-off-by: Jean Privat <jean@pryen.org>