leap: Separate browser into separate class

This will allow self-contained state management and the potential for
multiple browser backends.
main: Expand regex for app urls

05aaac88d7f1c410a6638dd6a262a9c102ee22bd changed the link to "web-1"
instead of "run".  Simply pass all app urls to the respective app.
browser: Use a separate user-data-dir

Use a separate user-data-dir in order to keep chrome from launching the
new window as a child of an existing process, if one exists. This is
necessary to track the pid of the browser.

Previously the app would assume the browser had closed and report
incorrect status to the 2nd screen.
Move browsers to a new directory

It is still hard-coded for chrome, but there is room for allowing other
implementations.