Unify Exception Handling

This patch unifies how all pynag modules raise exceptions.

Instead of raising PynagError directly, each module now has one or more exceptions that inherit from PynagError.

This will increase granularity and allow us to be more flexible when catching exceptions.

This diff is relatively clean, except for Parsers where I also moved all of the existing Exceptions to the top of the file.

I don't expect this patch to break anything, since any code that was previously catching PynagErrors will still succeed since all the new exceptions inherit from PynagError.