Relax restrictions on the typing of class constant shape field names.

Summary: Relax the restrictions on what types class constants can have when used as shape field names. Previously, they were restricted to being int or string (and not even a type alias for them). We now use the same logic that we use for enum constants, where newtypes are acceptable as long as the actual underlying type is an int or a string. We also have to stop just doing direct structural comparison of types, now that they can be things other than just int and string. We also thread env through more of the related code, now.

Reviewed By: eletuchy, jwatzman

Differential Revision: D1451612