add transaction support

add transaction support... pretty rough around the edges but it works. still needs to return the correct http status code.

example usage:

```bash
$ curl -XPOST localhost:9000/api/v1/transaction -d'{
    "requests": [
        {
            "method": "POST",
            "url": "/api/v1/crud/user",
            "body": "{\"name\":\"shane\", \"email\":\"shane@sendgrid.com\"}"
        },
        {
            "method": "POST",
            "url": "/api/v1/crud/user",
            "body": "{\"name\":\"shane 2\", \"email\":\"shane2@sendgrid.com\"}"
        }
    ]
}'
```

response:
`[{"message":"success", "inserted_id":2},{"message":"success", "inserted_id":3}]`

Rollback (adjust the length of the name field below to exceed the column length):
```bash
$ curl -XPOST localhost:9000/api/v1/transaction -d'{
    "requests": [
        {
            "method": "POST",
            "url": "/api/v1/crud/user",
            "body": "{\"name\":\"shane\", \"email\":\"shane@sendgrid.com\"}"
        },
		{
            "method": "POST",
            "url": "/api/v1/crud/user",
            "body": "{\"name\":\"shane xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2\", \"email\":\"shane2@sendgrid.com\"}"
        }
    ]
}'
```

Response:
`[{"message":"success", "inserted_id":4},{"message":"Error 1406: Data too long for column 'name' at row 1 :: insert into user set name=?,email=?
"}]`
It's to satisfy the `http.ResponseWriter` interface