Skill tree for const generics features

Hold the alt/option key to zoom the skill tree; click and move to pan.
g min_cg MIN CONST GENERICS Minimum subset of const generics only allowing `const N: {integer} | bool | char` and fully concrete constants valtree VALTREES Use valtrees in all type level constants Design of structural equality is worked out Valtrees are implemented min_defaults CONCRETE CONST DEFAULTS Permit concrete defaults on traits/adts min_defaults->min_cg generic_defaults GENERIC CONST DEFAULTS Permit generic defaults on traits/adts Disallow usage of forward declared params via param env Decide when a generic default is considered well formed generic_defaults->min_defaults param_tys MORE CONST PARAM TYPES Permit more types to be as the type of a const generic A `Constable` that that signifies a type is valid to use as a const param type Generic const param types i.e. `T: Constable, const N: T` Consider `impl<const N: usize> Trait<{ Some(N) }> for ()` to constrain `N` param_tys->min_cg param_tys->valtree exhaustiveness IMPL EXHAUSTIVENESS Allow separate impls to be used to fulfill `for<const N: usize> (): Trait<N>` exhaustiveness->param_tys min_generic_consts MIN GENERIC CONSTANTS Allow type level constants to be generic i.e. `N + 1` Add a where clause that requires a given expression to be evaluatable e.g. `where evaluatable { N - 1 }` Unused substs make it hard to tell if a const is concrete or generic and breaks unsize coercion in some cases Don't eagerly error when evaluating constants during selection min_generic_consts->min_cg generic_consts GENERIC CONSTANTS Allow type level constants but better ✨ Allow writing a where clause that requires a condition to hold e.g. `where { N > 2 }` Some things can always evaluate and should not need a where clause e.g. `{ N == M }` `{ N / 1 }` If possible `where { N > 0 }` should imply `N - 1` is evaluatable generic_consts->min_generic_consts assoc_const_bounds ASSOCIATED CONST BOUNDS Permit where `where T: Trait<ASSOC = 10>` assoc_const_bounds->min_generic_consts arg_infer GENERIC ARG CONST INFER Permit using `_` for generic args arg_infer->min_cg