API: Sort keys for DataFrame.assign
Closes #9777

Previously the order of new columns from `.assign` was arbitrary. For predictability, we'll sort before inserting.

We need to be comfortable with this change since we can't change behavior later with a keyword arg.

Technically we _could_ allow referencing the a column defined within the same call to `assign` as long as they are sorted. e.g. `df.assign(C=df.A + df.B, D=df.C**2)` would work, but not `df.assign(df.D=df.A +df.B, C=df.D**2)`. But I don't think we should.

cc @mrocklin
