Improve use of exceptions overall

Add a few exception classes and use them. Fixes a few cases of throwing
strings instead of exceptions. Also resolves a slicing issue. Big commit!

Devices are not touched since they are changed dramatically in PNP.

Fixes #15 (though this doesn't include reconfiguration mode, we no longer
use issues to track long-term plans, but rather specific bugs).