Generic find_iterator template added
BLOCK_TYPE: Changed definition from enum back to static const block_t

This change is necessary since old compilers are get in trouble with
such an definition and can not choose the signature for functions like
std::remove(). Moreover, the initialisation of BLOCK_TYPE has moved into
the cpp files. The change implicit that BLOCK_TYPE is not used in switch
cases. Use if..else instead.