TODO:
 * should we use 'wordexp(1)' to expand ~/ or not ?
 * Use this terminology: mf iTar member filename, ti topic index number, ki key index string, kw keyword string, instead of just id 
 * Fix bugs related to by_index family of functions
 * add a itar_config.h file having some #define ...etc 
 * have utility functions and macros (str_skipblank, strnchr2chr, xxalloc ..etc) in a separate inlined file
 * have a macro called gnu_basename to remove ambiguity
 * add xxstrndup,..etc and only use xxalloc/xxfree for small fast amounts, then make alloca as its default
	I used to love alloca and over use it, it was used for loading entire compressed files which is wrong as there is a limited stack size, it should only be used for temporary processing of file names or alike.
 * Remove redundancy (duplicated variables) and unused variables
 * Have a flag have_file_ls
 * Make sure it works fine if file list is not available (not a priority)
 * Make sure that popping non-existing files or arbitrary seeking  won't affect later operations (recover from bad using)
 * Make sure that it's bullet proof (recover from bad input)
 * Formalize and unify terminology used (index/chunk/...etc)
 * Having a make target for shared object .so
 * MS-Windows port
