To do this well and systematically, we thought, how should this stuff be done from the perspective of the LibBitcoin C++ API user, and therefore we figured that we should write a C++ usecase-example program that illustrates what a user normally wants to use the LibBitcoin API for with respect to non-segwit templates and addresses (P2PKH and P2SH), and then design the segwit additions out of a motivation that they should mean gentle variations to the non-segwit usecase code, or at least be symmetric.