They weren't being invoked with the correct syntax (being passed the data and index, with the current node as the context). This commit also removes the d3_array wrapper, which does not appear to be necessary; I've forgotten why it was there in the first place.
This also fixes a few bugs in the new implementation, restoring support for the offset between the mouse and the dragged element by reporting a delta rather than an absolute offset. Also, this fixes an infinite loop when an element is removed from the DOM.
I'm including the axis component in the core build because it should be useful in many different visualization types, similar to the other svg components. The chart module contains a hodgepodge of more obscure visualization types, and there's no reason to pull those in for more common visualizations. Perhaps most importantly, the axis component isn't a chart type!
Rather than specifying the ticks directly, you specify the arguments that will be passed to the scale's ticks function. I suppose there are some obscure cases where you might want more direct control over the generation of ticks, but this makes the common case easy, and we could add a tickFunction property in the future if we wanted to allow arbitrary control. Alternatively, you could write a new scale type that supports the desired tick behavior (e.g., time scale).
The previous implementation was very unstable if a large number of nodes were connected to a single node (a single node connecting many). The problem was that the single node in the center would be moved many times for each connected node, never converging to a stable solution. The fix is to weight each node according to the number of links; in effect, the Gauss-Seidel relaxation then becomes the average of the connected links, rather than relaxing each link individually.