Add mipmaps to sf::Texture

I think not having mipmaps in SFML is something that needs to be changed, because it helps when using setScale and when putting a larger texture onto a smaller sized shape.
As I liked to have it myself I added this to sf::Texture and it should also fix Issue #123 .
I made it such that its backwards compatible and keeps deactivated until used. When not used it just adds a check of a status variable on some method calls. Its possible to use all underlying modes in combination with the smooth setting.
This uses the texture parameter to generate the mipmaps.
It looks like its working for me, but you would probably want to test it before applying.

PS:
I also put some effort into adding code for using the newer glGenerateMipmapExt and glGenerateMipmap and making mipmaps available for the internal texture of sf::RenderTexture. You can view those other commits in my forked repository at https://github.com/wintertime/SFML/tree/mipmaps .
I did not include those here, because I get graphical glitches sometimes although other times it looks like it works. I think there is either something wrong with the order of calls to the OpenGL functions or I experienced the driver bug mentioned on http://www.opengl.org/wiki/Common_Mistakes#Automatic_mipmap_generation .

Here is a small test program for trying it out, you can change a few parameters in the code and then look at a larger area of the texture squeezed into the window by pressing Numpad6 so you can watch the effect of mipmaps:

```C++
#include "SFML/Graphics.hpp"
#include <vector>

int32_t windowx(512);
int32_t windowy(512);
bool fullscreen(false);

void CreateTexture(sf::Texture& tex,int sz,int w,int b) {
  std::vector<sf::Uint8> pix;
  pix.resize(sz*sz*4);
  for(int y(0);y<sz;y+=w+b) {
    int ty(0);
    for(;ty<w && y+ty<sz;++ty)
      for(int x(0);x<sz;x+=w+b) {
        int tx(0);
        for(;tx<w && x+tx<sz;++tx) {
          int index=((y+ty)*sz+(x+tx))*4;
          pix[index  ]=255;
          pix[index+1]=0;
          pix[index+2]=0;
          pix[index+3]=255;
        }
        for(;tx<w+b && x+tx<sz;++tx) {
          int index=((y+ty)*sz+(x+tx))*4;
          pix[index  ]=0;
          pix[index+1]=255;
          pix[index+2]=0;
          pix[index+3]=255;
        }
      }
    for(;ty<w+b && y+ty<sz;++ty)
      for(int x(0);x<sz;x+=w+b) {
        int tx(0);
        for(;tx<w && x+tx<sz;++tx) {
          int index=((y+ty)*sz+(x+tx))*4;
          pix[index  ]=0;
          pix[index+1]=0;
          pix[index+2]=0;
          pix[index+3]=255;
        }
        for(;tx<w+b && x+tx<sz;++tx) {
          int index=((y+ty)*sz+(x+tx))*4;
          pix[index  ]=0;
          pix[index+1]=0;
          pix[index+2]=255;
          pix[index+3]=255;
        }
      }
  }
  sf::Image img;
  img.create(sz,sz,&pix[0]);
  tex.loadFromImage(img);
}

int main(int argc,char* argv[]) {
  sf::RenderWindow window(sf::VideoMode(windowx,windowy),"Test",
                    fullscreen ? sf::Style::Fullscreen : sf::Style::Default,
                    sf::ContextSettings(0,0,0,2,1));
  window.setVerticalSyncEnabled(1);

  sf::Texture tex;
  float scale(1.0f);
  int sz(512);
  int w(128);
  int b(128);

  //tex.setSmooth(true);
  tex.setUsedMipmaps(2);
  tex.setRepeated(true);
  CreateTexture(tex,sz,w,b);

  sf::Event event;
  while(window.isOpen()) {
    window.clear();
    sf::RectangleShape shape(sf::Vector2f(512,512));
    shape.setTexture(&tex);
    shape.setTextureRect(sf::IntRect(0,0,sz*scale,sz*scale));
    window.draw(shape);
    window.display();

    while(window.pollEvent(event)) {
      if(event.type==sf::Event::Closed)
        window.close();
      else if(event.type==sf::Event::KeyPressed) {
        switch(event.key.code) {
        default:
          continue;
        case sf::Keyboard::Numpad6:
          scale*=1.1f;
          continue;
        case sf::Keyboard::Numpad5:
          scale=1.0f;
          continue;
        case sf::Keyboard::Numpad4:
          scale/=1.1f;
          continue;
        case sf::Keyboard::Numpad9:
          sz*=2;
          break;
        case sf::Keyboard::Numpad3:
          sz/=2;
          if(sz<1)
            sz=1;
          break;
        case sf::Keyboard::Numpad7:
          if(w<sz/2)
            w*=2;
          break;
        case sf::Keyboard::Numpad1:
          w/=2;
          if(w<1)
            w=1;
          break;
        case sf::Keyboard::Numpad8:
          if(b<sz/2)
            b*=2;
          break;
        case sf::Keyboard::Numpad2:
          b/=2;
          if(b<1)
            b=1;
          break;
        }
        CreateTexture(tex,sz,w,b);
      }
    }
  }

  return 0;
}
```