It turns out that pinMode can be called from outside of Setup(). So yeay, I can used a constructor as it's meant to be used.
Trying to make async_reader more accurate. I'm going to commit this but I'm just going to try and use pulseIn instead.
Made a basic receiver class and simplified the InputPin class(It will likely have to be optimized again but I was tired of getting it wrong).