Select component: use abstract classes

Original issue: #27