Add support for basic line rendering

Line rendering is also used to draw straight borders for rect
primitives. border_width and corner_radius are still unsupported as
variable line width and arcs/curves have yet to be implemented.
Re-introduce depth buffer for GUI element sorting

In order to support out-of-order draw calls for different types of
GUI elements we have to re-introduce the depth buffer to be able to
correctly occlude element types (e.g. lines, text, ...) that are drawn

This change also temporarily removes support for border drawing for
rects and circles. The intention is to reintroduce borders as line
(and curve) primitives instead.
Refactor docs to use square brackets for API refs

fg_window_handle: Prefer strong typedefs of fg_handle to check
compatibilty of handles with their corresponding memory pool at compile
Fix missing cd in .build.yml
Refactor and cleanup project

Establish consistent code style and add draft documentation. Core style
changes include: prefix public symbols with fg_; add GPLv3 license
header (modified to include SPDX identifier) to the start of each
source file. Also remove unnecessary code and fix fg_real usage across

Add functionality enable tmplgen usage to generate functions for some
headers. This is used to generate fg_vec and fg_mat operations for
Refactor rect prim rendering

Support for translucent elements interleaved with opaque elements has
been removed. Instead translucent elements are expected to be drawn on
after all opaque elements by the user.

Rect prim data is now packed according to OpenGL spec in order to
reduce the amount of GPU memory consumed.
Remove optional jemalloc dependency

Jemalloc and other alternative allocators can be injected at runtime using
LD_PRELOAD as long as libraries are dynamically linked to libc.
Apply active gui transform before pushing prims
Fix mat-vec multiply functions

If the "out" and "a" arguments of the multiply funcs were pointing
to the same arrays we'd get aliasing issues. Allocating a temporary
prevents this problem.
Rename umbrella project Tau -> Forge

Forge is now the official name for the project.
Remove sb_pop() function from stretchy_buffer.h

Was never really happy with the implementation and the way it was
being used in the library so remove sb_pop() for now. There may be
a time and place for it in the future.
Remove sb_pop() usage for IMGUI layout stack

Replace stretchy buffer for layout stack with a fixed-size buffer.
It is probably safe to assume the maximum depth of the stack although
it may be hard to predict the more complicated the GUI gets.
Fix hash table delete incorrectly filling the hole

Critical error meant that existing entries would no longer be
accessible because there was a gap between a keys "natural hash" and
the end of its cluster. A number of tests have been added to ensure
the fixed implementation is working as expected.
Fix linear probing not searching full hash table
Update stb_sprintf.h to v1.09
Add basic tests for vector and matrix types

Additionally fix the missing square root in the vecn_2norm() methods.
This was spotted thanks to the new unit tests!
Use flat arrays for matrix-types

Using flat arrays fixes a -Wpedantic warning we were getting whenever
we had a function that would receive a const matrix. The warning in
question stated "pointers to arrays with different qualifiers are
incompatible in ISO C". The const-ness was being applied to the inner
array, not the underlying real.

Making this change has also revealed a performance error in the
matrix-vector multiplication. The matrix elements are now accessed in
contiguous order to hopefully make the operation more cache efficient.

To facilitate this change I've added a couple extra get/set methods
for matrices that translate a column + row (2d) index to a 1d index.
Rename "scalar" typedef to "real"
Fix glslangValidator args for lang ver 10:11.0.0
Remove TODO file and update third-party licenses

Experimental migration to using self-hosted Kanboard instance for
project management and todo tracking.