Feature: Reenwritening

It's about that time of semester again. Things must be changing. Here's the big bad list of what happened:

1. All imports of `gl3n` were moved to `dash.utility.math`. This is so that in the future, the transition to `gfm:math` is as smooth as possible. There are also aliases to more desirable type names, so that we can get away from using `vec3` and the like.
2. Assets: The asset system has been better defined. All actual assets only extend `Asset` (not `Component`), and some assets reference types that extend `AssetRef(T)`. This is so that the code is cleaner in general, and for serialization purposes, so that we're not serializing entire textures/meshes.
3. Serialization/Components: There should no longer be anyone accessing Yaml nodes directly. The new standard is to deserialize directly into a `struct`/`class`, and access from there. `GameObject` and `Component` have both been rewritten to live by this rule, and the resulting code is much simpler. No more ensuring yaml nodes are maps, no more doing `tryFind`s, just straight accessing of a description.

Feedback welcome! While there are a butt load of changes in this PR, most of them are the `vec3`->`vec3f` swap, so it's not as scary as it looks.

Destroy!