Bridging the Gap between Semi-supervised and Supervised Continual Learning via Data Programming