Optimizations (Lists, heapq, TreeNode)

Several optimisations:
* Using Lists of Integers instead of Strings for Binary Representation
* heapq instead of PriorityQueue
* TreeNode Object instead of Inline Tuple