Layerer that uses a breadth first search to assign layers to the nodes.
The nodes of the first layer can be freely chosen (see CORE_NODES).
The nodes belonging to a subsequent layer are determined as follows:
Add all yet unassigned nodes to the new layer that are connected to nodes
already assigned.
As a consequence all connected nodes will be at most one layer apart.
Also, edges between nodes that belong to the same layer are possible.
The data provider key used to look up the core nodes
of the bfs layering.
The BFSLayerer will try to retrieve a
data provider from the graph to be layered with this key.
The looked up data provider should provide boolean values
for the nodes of that graph. The boolean value signals
whether a node is to be placed in the first layer or not.
If the are no nodes marked as core nodes then nodes with
indegree 0 are considered to be core nodes.