Custom cursor

Re-opening #181 against customcursor branch.