Breakpoints now have ids. Consolidated location lookup logic

- Gave breakpoints a monotonically increasing id (similar to gdb) for easier manipulation. 
- Centralized looking up address by location (file+line, function) to DebuggedProcess.FindLocation
- FindLocation supports arbitrary addresses and breakpoint ids
- Added BreakByLocation and ClearByLocation to DebuggedProcess and changed the commands to call them instead.
- BreakByLocation can now also use an address `b 0x400d60` will work
- ClearByLocation can take a breakpoint id or address (as well as the existing file + line and function)