LiquidCrystal: One bugfix in setCursor and change all atributes from private to protected

Hi!
It is my first contribution to Arduino I hope changes I have made are useful ones :) 

In case when LiquidCrystal was initialized for 4 line display and using setCursor with line 4 would read some garbage from memory as row_offset

Second change is to allow override behavior of single functions for derived classes. For example - LCD 4x16 has different row_offsets than 4x20 so with all attributes being protected instead of private You can do something like that:
```
class NewLQ: public LiquidCrystal {
public:
  NewLQ (uint8_t rs, uint8_t e, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) :  LiquidCrystal(rs,e, d0, d1, d2, d3) {
  };
  void setCursor(uint8_t col, uint8_t row)
  {
    int row_offsets[] = { 0x00, 0x40, 0x10, 0x50 };
    if ( row >= _numlines ) {
      row = _numlines-1;    // we count rows starting w/0
    }

    command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
  };
};
```

and then use NewLQ if You have 4x16 instead of copying whole LiquidCrystal into sketch and making changes to row offsets.

Row offsets I got from this thread http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1253367247

I'll try to patch LiquidCrystal to work out of the box both with 4x20 and 4x16, but this is simple fix useful in more scenarios.