Update cleanup() method to add the new lists.
Add a method to simplify buildings based on the area, the distance between the points, and the angle between the points. Unfortunately, the angle part isn't working well.
The CoordinateSequence* that is returned is a copy of the CoordinateSequence* that is used. A new polygon has to be created in the end.

In addition, a const copy of Building is returned when using QList::at(). Using the array-style indexing allows read/write to the object.

Also, change max distance for removal to 0.05, and change max angle for removal to 5 degrees.
Use PreparedPolygon when doing multiple operations on a polygon. This saves some time for the intersect() method, at least.
Get a read-only version of CoordinateSequence when we aren't editing it, so that the coordinates aren't copied, and cover a possible (but unlikely) memory leak.