DreamCoder: Growing generalizable, interpretable knowledge with wake-sleep Bayesian program learning