At this point this is very WIP, so don't even bother testing it or commenting on anything. I decided to wait for #46 (closed) to be implemented, which is blocked on a bug in libQuotient, before continuing this, since it doesn't make sense to implement this without it