pub fn split_number(n: usize) -> Vec<u8> {
    // high bit = last byte in chain?
    // low bits = binary representation
    let mut bytes = vec![];
    let mut i = n;
    let chunk = 0b1000_0000;

    loop {
        let low = i % chunk; // get next 7 bits in usize
        i /= chunk; // shift right by 7

        // set high bit & append to chain
        bytes.push(if bytes.is_empty() { chunk + low } else { low } as u8);

        // like a do-while
        // makes sure a number is always pushed
        if i == 0 {
            break;
        }
    }

    // reverse chain so high bit byte is last
    bytes.reverse();
    return bytes;
}
Splits a number into a vector of bytes.
Each byte in the vector is layed out as follows:
```plain
CDDDDDDD
```
Where C is the continue bit-flag, and d are data bits.
These sequences are designed to be insertable into byte streams.
For example, `0b10001000_00100101_00100100` would become
`[0b10100100, 0b11001010, 0b10100000, 0b00001000]`.
passerine-common/src/number.rs