SMS: Automating inference, learning, and design using probabilistic programming