Correctly read the selected option of <select> inputs

Also refactored the form-reading code to multimethods to allow easier
modification of how to read a form