HopPG: Self-Iterative Program Generation for Multi-Hop Question Answering over Heterogeneous Knowledge