If you have questions please ask.
(Please note, the code in this post is (for the most part) NOT tested.)
while((leftExit == false) || (rightExit == false)) { //You should be able to replace your while loop for this code...
leftOutput = leftTicks-nMotorEncoder[LB]; //Proportional, works for fwd and rev
rightOutput = rightTicks-nMotorEncoder[RB]; //Proportional, works for fwd and rev
if (abs(leftOutput)<EC_tolerance) leftExit=true; //Exit code
if (abs(rightOutput)<EC_tolerance) rightExit=true; //Exit code
capValue(REV, leftOutput , FWD); //sync left/right
capValue(REV, rightOutput , FWD); //sync left/right
int addL = nMotorEncoder[RB]-nMotorEncoder[LB]; //sync left/right
int addR = nMotorEncoder[LB]-nMotorEncoder[RB]; //sync left/right
capValue(REV, addL, FWD); //sync left/right
capValue(REV, addR, FWD); //sync left/right
chassis(leftOutput+addL, rightOutput+addR); //sync left/right, output
}
Now of course you need capValue(x,y,z). You can define it…
#define capValue(Min,Value,Max) Value = (Value<Min)? (Min):(Value); Value = (Value>Max)? (Max):(Value)
capValue(REV, rightOutput , FWD);
… or you can use pointers. (Above code would need to be modified for pointer use, I believe.)
int capValue(int min, int* val, int max) {
int result = &val;
result = (result < min) ? min : result;
result = (result > max) ? max : result;
return result;
}
capValue(REV, *rightOutput , FWD); //note the asterisk!!!
Also, REV and FWD need to be defined:
#define FWD 127
#define REV (-127)
Questions? Comments? 
EDIT: The proportional control has controlled deceleration, but not acceleration. But I think that it is the deceleration that is important.
EDIT 2: The encoders probably will keep you straighter due to gyro drift, but I am not sure.