Split up front-end UI into separate modules

Move the item list and general-purpose UI
controls into separate modules.
Speed up item list scrolling by virtualizing list view

Only instantiate visible items when rendering item list.
This avoids parsing URLs and constructing DOM nodes
for items which are not visible.