These functions are for cross-validating the SVD of a matrix.  They
  assume a model $X = U D V' + E$ with the terms being signal
  and noise, and try to find the best rank to truncate the SVD of x
  at for minimizing prediction error.  Here, prediction error is measured
  as sum of squares of residuals between the truncated SVD and the
  signal part.
  
For both types of cross-validation, in each replicate we leave out part
  of the matrix, fit an SVD approximation to the left-in part, and measure
  prediction error on the left-out part.
  
In Wold-style cross-validation, the holdout set is "speckled", a random set 
  of elements in the matrix.  The missing elements are predicted using 
  impute.svd.
  
In Gabriel-style cross-validation, the holdout set is "blocked".  We 
  permute the rows and columns of the matrix, and leave out the lower-right
  block.  We use a modified Schur-complement to predict the held-out block.
  In Gabriel-style, there are krow*kcol total folds.