* Make the seed in default initialization controllable
Since seed() is being called in default initialization of Space, it should be controllable for reproducibility.
* Updated derived classes of Space to have their seeds controllable at initialization.
* Allow Tuple's spaces to each have their own seed
* Added dict based seeding for Dict space; test cases for Tuple and Dict seeding
* Update discrete.py
* Update test_spaces.py
* Add seed to __init__()
* blacked
* Fix black
* Fix failing tests
* Allow custom observation spaces in VectorEnv
* Replace np.copy by deepcopy in reset of SyncVectorEnv
* Add tests for VectorEnv with custom spaces
* Add tests for shared memory and batches of custom spaces
* Remove unused import in VectorEnv test
* Add warning note in the Space class for custom spaces
* Updated spaces.py method description
No longer sampling from uniform distribution always, changing distribution
* update space.py sampling method description
The "strong random seed" defined in utils.seeding and used in environments
cannot be used to seed the action spaces (np.random.RandomState only
supports uint32 seeds).
For consistency, the same seeding procedure should be used everywhere.