Implement topology normalization

The topology normalization algorithm will be used to remove overlaps between displays if there are any after updating a display. It is based on the ChromeOS implementation.

Additionally:
- use float instead of double as discussed in the design doc, then we can also use PointF and RectF
- use ArrayDeque instead of LinkedList as that's the recommended way
- handle the edge case when a display is added to the topology twice
- implement a test for removing the primary display

Bug: 364906359
Flag: com.android.server.display.feature.flags.display_topology
Test: DisplayTopologyCoordinatorTest, DisplayTopologyTest
Change-Id: I563c3a767b3144625edd0c11119c51b21f520454
4 files changed