This is a great idea to fix the Arduino EEPROM library but why not use the excellent support already available in AVR?
The compiler supports marking a variable as stored in EEPROM with the attribute EEMEM. This allows symbolic handling of EEPROM addresses instead of the manual method forced by the Arduino EEPROM library. Also there are already all the needed functions for different data size access in AVR EEPROM, avr-libc: <avr/eeprom.h>: EEPROM handling
#include <avr/eeprom.h>
int ex EEMEM;
...
eeprom_write_word(&ex, 42);
...
int x = (int) eeprom_read_word(&ex);
The really bad new is that the Arduino build does not support the initialization of EEPROM. This is not uploaded with the sketch. Otherwise you could initialize the EEPROM variables directly.
int ex EEMEM = 42;
Using EEPROM such 24LC256 requires access through an I2C/TWI driver. There are a few around.
Cheers!