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:
`std::random_shuffle` internally uses `rand()` as the random number generator, whose randomness quality is horrible. Besides, the original call to `std::random_shuffle` is not preceded by `srand()`, resulting in the same order every time.

C++11 actually has a `std::shuffle`, but sadly we cannot use it.