text: Title: tools.reduce: matrix rank affecting the dimensions of the result
  Body: `import hypertools as hyp`
  `import numpy as np`
  `print hyp.tools.reduce(np.random.normal(0,1,[5,100]),ndims=10).shape`
  
  This is the code I tried which was supposed to give me a 5x10 dimension matrix. However, because the rank of the matrix is 5, PCA is unable to generate 10 dimensions from the data. Therefore the resulting matrix I got was a 5x5 matrix.
  
  I talked about this issue with Professor Manning today, and he suggested a fix to this problem:
  if the number of dimensions to reduce to is greater than the rank of the matrix, then pad the matrix with rows of 0s to increase the rank, do PCA then eliminate the 0 rows.
  
  Could you look into this issue and let me know what you think? Thanks!