Abstracted DateInput and added Key handlers

Supported keys:
- ArrowUp: increase date type (year/month/day)
- ArrowDown: decrease date type (year/month/day)
- Enter: close date-picker
I'm not really a fan of using switch. Does our ci check that every case has a break? Otherwise it's really easy to introduce confusing errors here.