The register you are referring to is called PCLATH (not PCLatch), and is accessible from any of the four register files at address 0AH, 8AH, 10AH, and 18AH to make it easier to write to.
The PIC16f877A has 8K of program Flash, but the CALL and GOTO instructions only provide an 11 bit address so branching is limited to a 2K memory page, and four pages (13 bits) are required to map the entire 8K memory.
So the lower 11 bits (10:0) of the 13 bit PC (program counter) come from the CALL or GOTO instruction itself, and the upper 2 bits (12:11) come from bits 4 and 3 of the PCLATH resister. Since the PCLATH bits are not transferred to the PC until the CALL or GOTO instruction is executed, it is safe to set them up before hand. This is usually done using the BSF and BCF instructions.
Why bits 4:3 of PCLATH and not just 1:0? Because bits 4 and 3 "line up" with bits 4 and 3 of the high byte of the PC. This probably makes the internal bus structure simpler, and would also allow for different page sizes, e.g. 1K pages instead of 2K by using bits 4:2.
If you execute a CALL instruction, the entire 13 bit address is saved on the stack, so when you execute a RETURN instruction at the end of the subrotuine, you don't have to worry about the PCLATH bits.
Since the CALL and GOTO instructions only supply 11 bits of address, you must explicitly set up the PCLATH bits if they are different from the page you are in, or you are not sure what they are currently set to, even if you will be executing a CALL or GOTO within the same page.
Your solution c), where you use the BSF and BCF instructions to access PCLATH is almost correct, except it will jump to page 2 since you are setting bit 4 and clearing bit 3. For page 1, you want to clear bit 4 and set bit 3:
BCF PCLATH,4
BSF PCLATH,3
goto PPS2