Fixed #23853 -- Added Join class to replace JoinInfo
Used Join class directly as Query.join() argument
Removed Query.join_map

This structure was used to speed up join reuse calculation, but is
no longer needed. If there are use cases where removal has real-world
visible performance penalties, it should be relatively straightforward
to reintroduce it as map {alias: [Join-like objects]}.
Used Compiler.compile instead of calling as_sql() directly
Fixed count() error