Redesign of Target class with several fixes

- Target class is redesigned to hide data and allow access to it only via get methods;
- TargetMachine is created only once, so preventing memory leaks;
- target-feature attribute is not added when target attribute string is empty;
- usage of DataLayout was unified to depend on single definition in Target class
- DataLayout was changed for generic targets to contain v4-128-128, so generic-4 target allocates correct memory storage and aligns the mask correctly (according with __m128 type definition)

Note: To catch the essence of the changes, it's easier to look at individual commits - first one is bulky and doesn't do much in terms of changin logic. Two more commits are smaller, but change the logic.