Added argument parsing, user specified WM backend, and better automatic backend choosing