Switch from <input type="button"> to <button> for button components, and allow #text as an alias to #value for better semantics.
Rename _input to _element since it can be other things than <input>, and simplify <button> handling.