implement new array assignment shape matching rule. fixes #4048, fixes #4383

this rule ignores singleton dimensions, and allows the last dimension of
one side to match all trailing dimensions of the other.
simplification to new setindex_shape_check from @mschauer
consistent setindex shape checking using new rule

also reduce duplication of the related error messages
Merge branch 'jb/setindex_shape' of github.com:JuliaLang/julia into jb/setindex_shape