replace uiElement.map_list with a richer widget that allows sorting

uses knockout but provides a similar interface to the uiElement functions