Use real exceptions

Stop raising Exception, make custom ones.