Add more details to the source maps

- Previously, the whole rules were mapped to the beginning of the original
  rule. Now, we go deeper: Map comment to comment, declaration to
  declaration, selector to selector, etc.

- Added tests for the generated source maps.

- Improved documentation.

The reason is to be able to use sheet in ai/autoprefixer. Therefore I've
made one seemingly unrelated change: The semicolon of the last declaration
of a rule is only omitted when optimizing. Which is what people probably
expect anyway.

[Demo](http://sokra.github.io/source-map-visualization/#base64,QGNoYXJzZXQgInV0Zi04IjsKCi8qDQogKiBOdWxsYSB2aXRhZSBlbGl0IGxpYmVybywgYSBwaGFyZXRyYSBhdWd1ZS4NCiAqIEN1cmFiaXR1ciBibGFuZGl0IHRlbXB1cyBwb3J0dGl0b3IuDQogKi8KCmJvZHkgewogIC8qIEFub3RoZXIgY29tbWVudC4gKi8KICBiYWNrZ3JvdW5kOiAjZmZmCn0KCkBpbXBvcnQgJ2Zvby5jc3MnOwpAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgZnJvbSB7CiAgICBvcGFjaXR5OiAwOwogICAgb3BhY2l0eTogMQogIH0KICAKICB0byB7CiAgICBvcGFjaXR5OiAxCiAgfQp9CgpAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgZnJvbSB7CiAgICBvcGFjaXR5OiAwOwogICAgY29sb3I6ICMwMDAKICB9CiAgCiAgdG8gewogICAgb3BhY2l0eTogMQogIH0KfQoKQG1lZGlhIHNjcmVlbiwgcHJvamVjdGlvbiB7CiAgaHRtbCB7CiAgICBiYWNrZ3JvdW5kOiBibGFjazsKICAgIGNvbG9yOiB3aGl0ZQogIH0KICAKICBib2R5IHsKICAgIHdpZHRoOiA4MDBweDsKICAgIG1hcmdpbjogMCBhdXRvCiAgfQp9CgpAbWVkaWEgcHJpbnQgewogIGh0bWwgewogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGNvbG9yOiAjMDAwCiAgfQogIAogIGJvZHksCiAgc2VjdGlvbiB7CiAgICBwYWRkaW5nOiAyZW0KICB9Cn0KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbiB7CiAgaHRtbCB7CiAgICBiYWNrZ3JvdW5kOiBibGFjazsKICAgIGNvbG9yOiB3aGl0ZQogIH0KICAKICBib2R5IHsKICAgIHdpZHRoOiA4MDBweDsKICAgIG1hcmdpbjogMCBhdXRvCiAgfQp9CgpAbWVkaWEgcHJpbnQgewogIGh0bWwgewogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGNvbG9yOiAjMDAwCiAgfQogIAogIGJvZHkgewogICAgcGFkZGluZzogMmVtCiAgfQp9CgpoMSB7CiAgZm9udC1zaXplOiAyZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yZW07CiAgZm9udC13ZWlnaHQ6IG5vcm1hbAp9CgpoMSB7CiAgZm9udC1zaXplOiAyZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yZW07CiAgZm9udC13ZWlnaHQ6IG5vcm1hbAp9CgpoMSwKaDIsCmgzIHsKICBmb250LXdlaWdodDogYm9sZAp9CgovKiMgc291cmNlTWFwcGluZ1VSTD10ZXN0LmNzcy5tYXAgKi8=,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5jc3MiLCJzb3VyY2VzIjpbInRlc3QuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCO0E7QUFFQTs7OzhGO0E7QUFLQSxNO0VBQ0Usc0I7RUFDQSxnQjtDO0E7QUFHRixrQjtBQUNBLG1CO0VBQ0UsTTtJQUNFLFc7SUFDQSxVO0c7RTtFQUdGLEk7SUFDRSxVO0c7QztBO0FBSUosbUI7RUFBa0IsTTtJQUFLLFc7SUFBVSxXO0c7RTtFQUFXLEk7SUFBRyxVO0c7QztBO0FBQy9DLDJCO0VBQ0UsTTtJQUNFLGtCO0lBQ0EsWTtHO0U7RUFHRixNO0lBQ0UsYTtJQUNBLGM7RztDO0E7QUFJSixjO0VBQ0UsTTtJQUNFLGlCO0lBQ0EsVztHO0U7RUFHRixLO0VBQUEsUztJQUVFLFk7RztDO0E7QUFHSiwwQjtFQUF5QixNO0lBQUssa0I7SUFBaUIsWTtHO0U7RUFBWSxNO0lBQUssYTtJQUFZLGM7RztDO0E7QUFBZSxjO0VBQWEsTTtJQUFLLGlCO0lBQWdCLFc7RztFO0VBQVcsTTtJQUFLLFk7RztDO0E7QUFDN0ksSTtFQUNFLGU7RUFDQSxpQjtDO0E7QUFHRixJO0VBQ0UsaUI7RUFDQSxtQjtDO0E7QUFFRixJO0VBQUcsZTtFQUFjLGlCO0M7QTtBQUFpQixJO0VBQUcsaUI7RUFBZ0IsbUI7QztBO0FBQ3JELEc7QUFBQSxHO0FBQUEsSTtFQUdFLGlCO0MifQ==,QGNoYXJzZXQgInV0Zi04IjsNCg0KLyoNCiAqIE51bGxhIHZpdGFlIGVsaXQgbGliZXJvLCBhIHBoYXJldHJhIGF1Z3VlLg0KICogQ3VyYWJpdHVyIGJsYW5kaXQgdGVtcHVzIHBvcnR0aXRvci4NCiAqLw0KDQpib2R5IHsNCiAgLyogQW5vdGhlciBjb21tZW50LiAqLw0KICBiYWNrZ3JvdW5kOiAjZmZmDQp9DQoNCkBpbXBvcnQgJ2Zvby5jc3MnOw0KQGtleWZyYW1lcyBmYWRlSW4gew0KICBmcm9tIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIG9wYWNpdHk6IDENCiAgfQ0KDQogIHRvIHsNCiAgICBvcGFjaXR5OiAxDQogIH0NCn0NCg0KQGtleWZyYW1lcyBmYWRlSW57ZnJvbXtvcGFjaXR5OjA7Y29sb3I6IzAwMH10b3tvcGFjaXR5OjF9fQ0KQG1lZGlhIHNjcmVlbiwgcHJvamVjdGlvbiB7DQogIGh0bWwgew0KICAgIGJhY2tncm91bmQ6IGJsYWNrOw0KICAgIGNvbG9yOiB3aGl0ZQ0KICB9DQoNCiAgYm9keSB7DQogICAgd2lkdGg6IDgwMHB4Ow0KICAgIG1hcmdpbjogMCBhdXRvDQogIH0NCn0NCg0KQG1lZGlhIHByaW50IHsNCiAgaHRtbCB7DQogICAgYmFja2dyb3VuZDogI2ZmZjsNCiAgICBjb2xvcjogIzAwMA0KICB9DQoNCiAgYm9keSwNCiAgc2VjdGlvbiB7DQogICAgcGFkZGluZzogMmVtDQogIH0NCn0NCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbntodG1se2JhY2tncm91bmQ6YmxhY2s7Y29sb3I6d2hpdGV9Ym9keXt3aWR0aDo4MDBweDttYXJnaW46MCBhdXRvfX1AbWVkaWEgcHJpbnR7aHRtbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzAwMH1ib2R5e3BhZGRpbmc6MmVtfX0NCmgxIHsNCiAgZm9udC1zaXplOiAyZW07DQogIGZvbnQtd2VpZ2h0OiBib2xkDQp9DQoNCmgyIHsNCiAgZm9udC1zaXplOiAxLjJlbTsNCiAgZm9udC13ZWlnaHQ6IG5vcm1hbA0KfQ0KaDF7Zm9udC1zaXplOjJlbTtmb250LXdlaWdodDpib2xkfWgye2ZvbnQtc2l6ZToxLjJlbTtmb250LXdlaWdodDpub3JtYWx9DQpoMSwNCmgyLA0KaDMgew0KICBmb250LXdlaWdodDogYm9sZA0KfQ0K).