Generalize Asset Views (#40)
* Create AssetView base class
* Rename BackgroundRenderer to BackgroundView
* Rename RoomRenderer to RoomView for consistency
* Move the zoom member into the base AssetView class
* Change the tileset properties spinboxes to use the same min (0) and max (32000) as GM5 and GM8.
* Disabled wrapping on the tileset spinboxes so you can't go below the min (0) and get the max (32000) because nobody will ever want the max for these properties.
* Return early and do not paint zero-area grids
* Added comments explaining why certain things are done.
* Use a pen with `Qt::MiterJoin` to prevent the edges of the rectangle-based grid from having diamond-shaped holes.
* Use a pen with `Qt::SquareCap` which gives half-pixel (actually half pen width) extension so the spots where the lines of the line-based grid overlap and the xor cancels is not 50/50 transparent or opaque.
* Offset the non-zero grid spacing by half a pixel for correct alignment.
* Fixed the offset of the line-based grid by starting its painted lines at the horizontal or vertical offset. I prefer doing it this way as opposed to just translating the entire painter for both grid methods because it can short circuit and not have to paint the entire grid in certain cases.
* Save and restore the state of the `QPainter` before returning so it doesn't affect the caller.