use real type for abstract catches, then change variable type to concrete one (closes #2859)
do not generate @:enum abstracts if they consist of @:enum fields (closes #2858)