Clean up serialization APIs + docs
This moves `torch::pickle_save` and `torch::pickle_load` to `torch::save` and `torch::load` respectively. This has been an issue for a while and the confusing name differences between Python and C++ have tripped up many PyTorch users. The `pickle_` methods also never made it into the C++ docs, so there was no way to discover them unless users sifted through old PRs.
Since this is overloading `torch::save` and `torch::load` with new functionality, we need to take extra care (i.e. have a bunch of `std::enable_if`s) to not BC break existing `save` / `load` usages. These use an old mechanism that can probably be done entirely through the pickle API, but we should deprecate it for a release before changing the behavior (which could cause silent changes in how serialization works) before doing this (if we do it at all).