Making Linear MDPs Practical via Contrastive Representation Learning