This routines preforms the following operations:
1) If y is a row vector it is transformed in a column vector;
2) Checks that X is a 2-dimensional array;
3) Checks dimension consistency of X and y;
4) Removes observations with missing or infinite values from X or y
(listwise exclusion);
5) Adds to matrix X a column of ones if option intercept is 1;
6) Checks if there are constant columns in matrix X. In other words, if
Xj is a generic column of X (excluding the column which contains the
intercept) it removes it if max(Xj)=min(Xj) and produces a warning.
7) Computes final values of n and p after previous operations;
8) Makes sure than n>=p;
9) Makes sure that new X is full rank