text: Title: Possibility to use callable for relationship.back_populates and ForeignKey.column
  Body: ### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10049
  
  <div type='discussions-op-text'>
  
  <sup>Originally posted by **AlexanderPodorov** July  1, 2023</sup>
  Given this option we could make existing mapping more robust and reliable for refactoring.
  Current code, example from [here](https://docs.sqlalchemy.org/en/20/orm/basic_relationships.html#declarative-vs-imperative-forms):
  ```python
  class Parent(Base):
      __tablename__ = "parent_table"
  
      id: Mapped[int] = mapped_column(primary_key=True)
      children: Mapped[List["Child"]] = relationship(back_populates="parent")
  
  
  class Child(Base):
      __tablename__ = "child_table"
  
      id: Mapped[int] = mapped_column(primary_key=True)
      parent_id: Mapped[int] = mapped_column(ForeignKey("parent_table.id"))
      parent: Mapped["Parent"] = relationship(back_populates="children")
  ```
  Suggested example code:
  ```python
  from __future__ import annotations
  
  class Parent(Base):
      __tablename__ = "parent_table"
  
      id: Mapped[int] = mapped_column(primary_key=True)
      children: Mapped[List[Child]] = relationship(back_populates=lambda: Child.parent)
  
  
  class Child(Base):
      __tablename__ = "child_table"
  
      id: Mapped[int] = mapped_column(primary_key=True)
      parent_id: Mapped[int] = mapped_column(ForeignKey(lambda: Parent.id))
      parent: Mapped[Parent] = relationship(back_populates=lambda: Parent.children)
  ```
  In the above example if we rename any of attributes, the mapping will still work. No need to manually rename `back_populates` and foreign key column name.
  Please note that `lambda` is kind of required here to enable forward references and lazy evaluation of attributes.
  What do you think? Thanks.</div>