Rewrite (a small subset of) OpenTTD in Lean!

- Focus on road vehicles for now for simplicity
- Top-down rectangular grid instead of isometric
- Basically it'll be a probalistic cellular automata
- Use https://github.com/funexists/raylean/

So anyways we have a rectangular grid of points 5m apart and you can add a directed road between a point and any of its 8 neighbors (24 once I add bridges and tunnels, or maybe I should add them right from the beginning?). At any time, at most one vehicle occupies each point.

Buildings are rectangles with top right and bottom left corners in this grid.

By default, vehicles move at a realistic speed (3 ticks per second) but we can run the simulation faster too

Two kinds of roads, regular and highway. Vehicles can move two segments at a time on highways but only in the same direction (TODO: how to make the pathfinder exit on a multilane highway?)

If only one possible road out of a point, then the vehicle just goes ahead. Otherwise it runs a BFS pathfinder to its destination and checks if each road going out is occupied in order of distance until it finds one that's not (TODO: don't use a road if its distance exceeds the shortest path by a huge factor?)

It's probalistic because the order that the vehicles are processed during each tick is random, so for instance a random vehicle moves at a 4-way stop rather than the one that has been there the longest. This also makes merges random. You can use a yield sign to push a vehicle to the bottom of this order. A vehicle cannot move to a spot that is occupied during the current grid state or the next state (TODO: handle crossing diagonal roads)

Traffic lights are kinda janky but shouldn't be too hard to support.

Vehicles seat exactly one person and at the beginning of the day they randomly leave houses or apartments for workplaces in the city and there are also trucks between factories and stores and stuff

Time starts at 8 AM and ends at midnight each day

The internal data representation of the game is a 2D vector for the grid for fast access for info about a point and arrays of vehicles, buildings etc to easily iterate over all those objects. To save the game we dump all these to JSON and vice versa for loading a save (unfortunately this bloats up the binary ugh). I don't really need to plan this out in advance but rather just add more fields as needed

First step: render the grid using raylib

https://www.raylib.com/cheatsheet/cheatsheet.html

The street names are from https://github.com/rossburton/barnum/blob/master/source-data/street-names.txt
