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
Add support for reading most common form inputs

* Added new unit tests to cover various input states
* Now using ordered map to guarantee parameter order
* Also supporting passing multiple parameter values
  using the same format as ring's param middleware
Merge remote-tracking branch 'glenjamin/more-form-stuff'