Created by: helinwang
Fixes: https://github.com/PaddlePaddle/Paddle/issues/6490
ProgramDescBind is the builder for ProgramDesc, we need to pass the real entity (ProgramDesc) between module boundaries.
This is because ProgramDescBind is an implementation detail for the module that builds ProgramDesc. For the communication between "the module that builds ProgramDesc" and "executor", we need to use ProgramDesc. In this way, when the implementation detail (ProgramDescBind) changes, the executor code does not need to change.