Enhance ProgramDesc constructor taking protobuf string for RNN
Created by: kexinzhao
Right now, when constructing a ProgramDesc instance from a proto::ProgramDesc, there will be error for test_rnn_encoder_decoder.
The reason is the following code: https://github.com/PaddlePaddle/Paddle/blob/445c74cd931714929d44eb83313194ed58b12d5d/paddle/framework/op_desc.cc#L121-L129 where it tries to assign a block pointer that hasn't been created yet (because the ProgramDesc constructor calls the BlockDesc constructor one by one following the order of the block idx) as a attribute to a RNN while operator.
This is issue will be fixed together with #8062 (closed) and #8059 (closed)