Cleanup nonlinear program

1. Move All contents of `NonlinearProgramWConstraintObjects` to `NonlinearProgram`
2. Add support for IPOPT in `NonlinearProgram`. The procedure to install IPOPT is described in https://groups.csail.mit.edu/locomotion/private/robowiki/index.php?title=IPOPT. This pull request should be merged after we have a working Makefile in ipopt-pod
3. Move the `infeasibleConstraint` from `InverseKinematics` to `NonlinearProgram`
i think this class (and PolynomialProgram, etc) needs to change a bit more?
it looks like you've in a sense maintained functionality simple because this class overloads objectiveAndNonlinearConstraints(), but in fact i could now do something like

qp = QuadraticProgram(Q,...)
qp = addLinearConstraint(qp,...)  
or 
qp = addObjective(qp,...)

and it would *appear* to accept these new terms but not actually use them.  correct?