Begin implementing abstract platform

It should be `Result<Option<T>, Error>` for `try_recv` and `Option<T>` for `recv_opt`.