Eng 6095 index with address

Pass eecheck on local machine, but haven't check the result of Junit test.

I worry about how to deconstruct Key and Data: is the default deconstructor enough?

After refining the code, the next step is to append address to KeyType other than IntsKey.
This file can keep almost the same if we use 
```
template <typename KeyType, typename DataType>
class PointerKeyValuePair {
public:
    typedef KeyWithPointer<KeyType> first_type;
```
to hide the KeyWithPointer template in the PointerKeyValuePair.
Then the parameter of template is the original KeyType.