freedreno/a6xx: Re-write program state building
This restructures a large part of a6xx program state building to more closely match turnip.. it isn't exactly the same (due to shader variants and gl features that turnip doesn't have to support, and slightly different structure of state objects to split out some state that potentially changes at draw time, like interpolation), but it is at least closer.