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