Deep data manipulation with paths and wildcards.
@type path() :: PipetteElixir.Path.t()
@spec dig_get(any(), path(), any()) :: any()
@spec dig_pop(any(), path()) :: {any(), any()}
@spec dig_put(any(), path(), any()) :: any()
@spec dig_update(any(), path(), (any() -> any())) :: any()