[ty] Add support for functional TypedDict (#24174)
## Summary
This PR adds basic support for functional TypedDict construction,
including recursive TypedDicts. The intent is to follow the patterns
we've established for functional NamedTuple and `type(...)` calls as
closely as we can.
There are two follow-up PRs that were carved out to make them easier to
review:
- https://github.com/astral-sh/ruff/pull/24226
- https://github.com/astral-sh/ruff/pull/24227
(My intent is to merge the stack once all three are approved. E.g., the
new false positive in the ecosystem test is fixed in
https://github.com/astral-sh/ruff/pull/24176.)
Part of: https://github.com/astral-sh/ty/issues/3095.
---------
Co-authored-by: Alex Waygood <alex.waygood@gmail.com>