Exceptions improvements

* use const keyword
* use an enum instead of a string to know the type of the exception
* line length
* remove throw in destructor (was removed with C++11)
* type should not be changed after initialization
* use virtual keyword