Support compilation for individual arch

A different approach for Pull request #24
Summary: 
- use a function pointer for init_arch to dispatch dynamically
- each arch requires a include.h file to include necessary files and defines their initialization for cs_open
- each arch needs to add his init_arch to the common array at runtime ( using `((constructor))` )

This approach has following advantages:
- Try to separate each arch from `cs.c`, thus reducing coding time for removing / adding new arch.
- Code is cleaner with less macro definition or switch case to dispatch in `cs.c` 
- Currently if the arch is not supported, there will be segment fault, we can change it easily to raise an error if `init_arch[ud->arch] == NULL`

It's not perfect yet since there are still some other overlapping in other functions i.e. `cs_close`, `cs_free`, `cs_option` that has not handled yet. If we decide to follow this approach we can do similar stuff to  those