Add ability to enter new collection UDFs and edit saved collection UDFs

in several places you call `getArguments()` in a conditional and then use the value. I assume you did this because you know `getArguments` can't change out from under you, and is not a costly method call. As the reader, it's hard to tell that.