title: Numpy random choice, replacement only along one axis
body: <p>I need to sample a bunch of pairs of points from an arrary.  I want that each pair consists of two DISTINCT points, but the points may be repeated amongst the various pairs.</p>
  
  <p>e.g., if my array is <code>X=np.array([1,1,2,3])</code>, then:</p>
  
  <pre><code>&gt;&gt;&gt; sample_pairs(X, n=4)
  ... [[1,1], [2,3], [1,2], [1,3]] # this is fine
  &gt;&gt;&gt; sample_pairs(X, n=4)
  ... [[1,1], [2,2], [3,3], [1,3]] # this is not okay
  </code></pre>
  
  <p>Is there a good way to accomplish this as a vectorized operation?  </p>