Russ is right, it's still open for changes, though I want to oversee any changes very carefully because I want to make sure we ship something that makes sense overall!
Altering column names is done as part of alter_field (if you look through that huge method, you'll see it somewhere in there); currently, the only override provision on there is to override some ALTER TABLE SQL which isn't going to work in your case. It also doesn't work for SQLite, but there the whole of alter_field is replaced as nothing is doable the normal way.
Would you be happy if I could stick a method hook in the middle of alter_field which you can override and then let you put sql_rename_column = None to stop it trying to do that itself?
As for dropping defaults, any constraint handling MUST be done with introspection; if you take a look at the introspection backends, there's a beefed-up new API in there as well called get_constraints, which the SchemaEditor's _constraint_names function uses to look up constraints for operations like this. I'd recommend that you implement the new get_constraints API - tell me if you need me to explain it, but I think the PostgreSQL version is pretty readable.
Would you still need to hook default creation in this case? Consistent names are not necessary, though obviously preferable for DBAs reading so they don't think Django is mad. If you need to hook default creation/deletion, I can easily add a similar thing into alter_field where if the _sql attribute is set to None we instead call an overrideable method.
Andrew