Implement tensor saving, loading and restoring
load ?prefix_namespace path loads all tensors from a file ensuring that they are disjoint from any pre-existing tensors; it optionally prefixes the namespaces of all the tensors stored in a file, checks that there is no clash of loaded tensors with any existing tensors (via the registry) -- raising error on a clash, and returns the resulting set of tensors. restore t_set path takes a set of tensors, finds them in the file as-is and updates the hosted buffers from the stored values -- raising error if a given tensor is missing in the file. save ~appending t_set path stores the given tensors in the file: if ~appending:true and the file exists, it replaces any of the overlapping tensors but keeps the other tensors already in the file; if ~appending:false it clears the file if one exists.