This allows writing e.g. `ptr.data_as<bNode>()` as an alternative to
`static_cast<bNode *>(ptr.data)`. There are a couple of benefits to this approach:
* It's less verbose.
* Reduces the amount of "forced" usages of `static_cast`.
* Allows us to add run-time type checks in that method.
The run-time type checks are not implemented in this patch, I'm still trying
to find a good way to do that. However, even without that, this patch improves
the situation already.
Pull Request: https://projects.blender.org/blender/blender/pulls/137720