alloc/dealloc thrashing reduction

The aim of this pull request is to reduce the amount of thrashing we're doing by allocating small, often short lived objects on the stack.

 * [ ] Vetex lists to vertex arrays
 * [ ] less/no temporary lists in `bsp.c:bsp_clip_polygons()` (Where destruction of them costs >95% of the runtime)

The initial changes are to start cleaning up access to `poly->vertices` through some helpers to make updating the containing structure easier.

 * [x] poly_vertex_count()
 * [x] poly_push_vertex()