Merge program app into product app branch.

If someone was going to review this, it would be better to review it as a separate PR first to minimize the size of changes per PR. This is just going into the product app branch which is separate PR.

Merging into https://github.com/dimagi/commcare-hq/pull/4727