Nonlinear program

* Define a class 'Constraint', that supports bounds and evaluation of the constraint. Each constraint also encodes the bounds on the decision variables. 
 * `NonlinearConstraint`. Support functions called `evalSparse` and `setSparseStructure`, which can set the sparsity pattern of the first order gradient. `NonlinearConstraint` can be constructed using a function handle, or its  `eval` function can be overloaded by child class
 * `LinearConstraint`. Constructed from a linear matrix
* `NonlinearProgram` is redefined. It now handles the constraints with both lower and upper bounds, rather than unilateral nonlinear constraint.
* `NonlinearProgramWConstraint` is a child class of `NonlinearProgram`. Its constraints and cost are constructed by adding `Constraint` object, using `addNonlinearConstraint`, `addLinearConstraint` or `addCost` function.