Remove `default` argument to apply.

Refactor `arg_kwarg_proxy_converter` into function in metadata_utils,
add explanatory comment.
Adds docstrings.
Raise `ValueError` if attempting to redistribute to incompatible size.
Raise `NotImplementedError` in some redistribution cases.

Also allow `distribute_as` to take `shape_or_dist`.