Refactor how choices collection are handled

Added a `Choices` object containing multiple helper methods to ease the
prompt integration with the choice types.