Add feature: dynamic icons

Allows dynamic icons by supporting function for icon option (in addition to the current "string" option):

someKey: { name: "some name", icon: function (trigger, key,  item) { return getIconFromSomewhere(key); } }