POC monad library using CRTP to fake Higher kinded types. This is seemingly surprisingly ergonomic and expressive.