Discrete-Continuous Mixtures in Probabilistic Programming: Generalized Semantics and Inference Algorithms