librustc: Check structure constructors against their types.

This breaks code like:

    struct Point<T> {
        x: T,
        y: T,
    }

    let pt = Point::<bool> {
        x: 1,
        y: 2,
    };

Change this code to not contain a type error. For example:

    let pt = Point::<int> {
        x: 1,
        y: 2,
    };

Closes #15875.

[breaking-change]

r? @huonw
Do we use the full word "structure" in other errors, instead of "struct"? Similarly, do we have precedent for the phrase "structure constructor"? My inclination is to call it a "struct literal".