Implementing Randomized Matrix Algorithms in Parallel and Distributed Environments