Fix and improve multiple places about random number generation and shuffling

* `cluster_seedgen()` now uses system entropy source `/dev/urandom` whenever possible.
* Fix `Caffe::RNG::operator=()`. The original version will result in two `shared_ptr` pointing to the same object with different reference counts and ultimately use-after-free or double-free problem.
* O(N) instead of O(N^2) algorithm for `ImageDataLayer::ShuffleImages()`.
* convert_imageset will now properly seed the random number generator before shuffling, no longer producing the same shuffled result each run.
@bhack 

See http://stackoverflow.com/questions/19219726/what-is-the-difference-between-shuffle-and-random-shuffle-c

You cannot pass in `caffe::rng_t` a.k.a `boost::mt19937` as the third parameter to `std::random_shuffle`. Instead, you need to write a functor class, instantiate it, and then pass to `std::random_shuffle`, which involves probably more code than reimplementing Fisher–Yates algorithm.