keyedData

fun <E : Element, D1, D2> Selection<E, D1>.keyedData(value: List<D2>, key: Element?.(Arguments<Any?, Any?>) -> Any?): UpdateSelection<E, D2>
fun <E : Element, D1, D2> Selection<E, D1>.keyedData(value: (index: Int, group: Group<E, D1>) -> List<D2>, key: Element?.(Arguments<Any?, Any?>) -> Any?): UpdateSelection<E, D2>

See analogous d3 function.

TODO: Figure out a way to strongly type key, even though it's called with two different sets of argument types.