Added hash_table.h, and implemented part of what fault_callback should do.
hash_table.h implements our hash table for pages, so that we can know if a page is already in the list at ~ O(1) time. Adding and removing items from hash table is O(1) exactly, while finding an element costs ~ O(1).
Still need to complete fault_callback, and by then the algorithm is mostly ready.
Tested compilation, still need to run & debug!