The first is a "Point Distribute" node, which takes a mesh and outputs a pointcloud, scattering points randomly on the surface based on the input density. The distribution algorithm is extremely basic at this point, and doesn't take into account an attribute weight at each vertex.
The second node is a "Point Instance" node, which is mainly a placeholder until the engineering design for how to work with instancing in geometry nodes is decided. For now it just runs the same code that the convert pointcloud to mesh operator uses.
Geometry Nodes: Add pointcloud support to geometry class
This adds another set of the same mesh functions but for pointclouds. There are probably better ways to generalize this functionality, but that may have to be rethought in the future anyway if we want to store multiple of each type. And anyway it's handy to have a specific set of "pointcloud" functions available in the node implementations.
This uses the code from the rewritten boolean modifier from 2.91 as a node. The implementation is about as minimal as it can get, since for now the use case of this node is mostly to test multiple geometry outputs and inputs.
The boolean code requires a BMesh, so the node converts the input meshes to BMesh, so the bmesh is added as a dependency to the nodes module.