Include context properties when serializing to json

If you do setip, setlanguage, or setproviders, these properties data is not submitted to segmentio. Instead you get

```json
"context": {}
```
This is because of well-known bug in json.net (http://json.codeplex.com/workitem/23769), where extra properties of classes that inherit from Dictionary are not serialized.

This pull request includes unit tests to demonstrate the existing problem and the solution.

With this, we transmit the ip, language, and providers with the context:
```json
{
  "secret": "...",
  "batch": [
    {
      "action": "identify",
      "userId": "99",
      "traits": {
        
      },
      "timestamp": "2013-08-27T17:57:34.4840223Z",
      "context": {
        "ip": "12.212.12.49",
        "language": "fr",
        "providers": {
          "all": false,
          "Mixpanel": true,
          "Salesforce": true
        }
      }
    }
  ],
  "context": {
    "library": "analytics-.NET"
  }
}
```

Previously, the inner context would be empty. Note that I'm unclear if segmentio is expecting to get context on both the identify and the batch, but that's the way the existing code does it, this commit doesn't touch the structure.