Application Layer Split

- This was a huge refactor to try and show some composition across layers. Components defined in the application layer can be composed of items defined in the layer below it (I want this to be the "data" layer, but I haven't actually named it properly yet).
- There looks to be a ton of duplicated code now, but I think the reality is I prematurely added a lot of collections for my data types, and I'm not even sure they're ever going to get used. Then they got duped to exist as collections for the new application layer types, which are completely incompatible because I didn't inherit here.