gh-37692: `matrix`, `Graph.incidence_matrix`, `LinearMatroid.representation`: Support constructing `Hom(CombinatorialFreeModule)` elements
<!-- ^ Please provide a concise and informative title. -->
<!-- ^ Don't put issue numbers in the title, do this in the PR
description below. -->
<!-- ^ For example, instead of "Fixes #12345" use "Introduce new method
to calculate 1 + 2". -->
<!-- v Describe your changes below in detail. -->
<!-- v Why is this change required? What problem does it solve? -->
<!-- v If this PR resolves an open issue, please link to it here. For
example, "Fixes #12345". -->
We use morphisms of `CombinatorialFreeModule`s (each of which has a
distinguished finite or enumerated basis indexed by arbitrary objects)
as matrices whose rows and columns are indexed by arbitrary objects
(`row_keys`, `column_keys`).
Example:
```
sage: M = matrix([[1,2,3], [4,5,6]],
....: column_keys=['a','b','c'], row_keys=['u','v']);
M
Generic morphism:
From: Free module generated by {'a', 'b', 'c'} over Integer
Ring
To: Free module generated by {'u', 'v'} over Integer Ring
```
Example application done here on the PR: The incidence matrix of a graph
or digraph. Returning it as a morphism instead of a matrix has the
benefit of keeping the vertices and edges with the result. This new
behavior is activated by special values for the existing parameters
`vertices` and `edges`.
```
sage: D12 = posets.DivisorLattice(12).hasse_diagram()
sage: phi_VE = D12.incidence_matrix(vertices=True,
edges=True); phi_VE
Generic morphism:
From: Free module generated by
{(1, 2), (1, 3), (2, 4), (2, 6), (3, 6), (4, 12),
(6, 12)}
over Integer Ring
To: Free module generated by {1, 2, 3, 4, 6, 12} over
Integer Ring
sage: print(phi_VE._unicode_art_matrix())
(1, 2) (1, 3) (2, 4) (2, 6) (3, 6) (4, 12)
(6, 12)
1⎛ -1 -1 0 0 0 0
0⎞
2⎜ 1 0 -1 -1 0 0
0⎟
3⎜ 0 1 0 0 -1 0
0⎟
4⎜ 0 0 1 0 0 -1
0⎟
6⎜ 0 0 0 1 1 0
-1⎟
12⎝ 0 0 0 0 0 1
1⎠
```
### :memo: Checklist
<!-- Put an `x` in all the boxes that apply. -->
- [x] The title is concise and informative.
- [x] The description explains in detail what this PR is about.
- [ ] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [ ] I have updated the documentation accordingly.
### :hourglass: Dependencies
<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - #12345: short description why this is a dependency -->
<!-- - #34567: ... -->
- Depends on #37607
- Depends on #37514
- Depends on #37606
- Depends on #37646
URL: https://github.com/sagemath/sage/pull/37692
Reported by: Matthias Köppe
Reviewer(s): gmou3