Structural Foundations For Probabilistic Programming Languages