JSON serialization of RegisteredService into LDAP

Handles https://github.com/Jasig/cas/issues/681

I striped down the `DefaultLdapMapper` so the entire service definition is persisted into a single attribute as JSON. There are setters that allow extending the serializer, and I also modified the tests to adjust the objectclass required. Some classes had to include getters for serialization to properly work. 
More evidence:

What goes in as json:

```json
{
  "@class" : "org.jasig.cas.services.RegisteredServiceImpl",
  "id" : 883880829872605,
  "description" : "Service description",
  "serviceId" : "https://?.edu/**",
  "name" : "Service Name1",
  "theme" : "the theme name",
  "proxyPolicy" : {
    "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy"
  },
  "enabled" : true,
  "ssoEnabled" : true,
  "evaluationOrder" : 123,
  "usernameAttributeProvider" : {
    "@class" : "org.jasig.cas.services.AnonymousRegisteredServiceUsernameAttributeProvider",
    "persistentIdGenerator" : {
      "@class" : "org.jasig.cas.authentication.principal.ShibbolethCompatiblePersistentIdGenerator",
      "salt" : "Y3JDRVh4M3A1b2ozY1RKSQ=="
    }
  },
  "logoutType" : "BACK_CHANNEL",
  "requiredHandlers" : [ "java.util.HashSet", [ "handler8", "handle92" ] ],
  "attributeReleasePolicy" : {
    "@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy",
    "attributeFilter" : null
  }
}
```

what is retrieved on the next call:

```
ew0KICAiQGNsYXNzIiA6ICJvcmcuamFzaWcuY2FzLnNlcnZpY2VzLlJlZ2lzdGVyZWRTZXJ2aWNlSW1wbCIsDQogICJpZCIgOiA4ODM4ODA4Mjk4NzI2MDUsDQogICJkZXNjcmlwdGlvbiIgOiAiU2VydmljZSBkZXNjcmlwdGlvbiIsDQogICJzZXJ2aWNlSWQiIDogImh0dHBzOi8vPy5lZHUvKioiLA0KICAibmFtZSIgOiAiU2VydmljZSBOYW1lMSIsDQogICJ0aGVtZSIgOiAidGhlIHRoZW1lIG5hbWUiLA0KICAicHJveHlQb2xpY3kiIDogew0KICAgICJAY2xhc3MiIDogIm9yZy5qYXNpZy5jYXMuc2VydmljZXMuUmVmdXNlUmVnaXN0ZXJlZFNlcnZpY2VQcm94eVBvbGljeSINCiAgfSwNCiAgImVuYWJsZWQiIDogdHJ1ZSwNCiAgInNzb0VuYWJsZWQiIDogdHJ1ZSwNCiAgImV2YWx1YXRpb25PcmRlciIgOiAxMjMsDQogICJ1c2VybmFtZUF0dHJpYnV0ZVByb3ZpZGVyIiA6IHsNCiAgICAiQGNsYXNzIiA6ICJvcmcuamFzaWcuY2FzLnNlcnZpY2VzLkFub255bW91c1JlZ2lzdGVyZWRTZXJ2aWNlVXNlcm5hbWVBdHRyaWJ1dGVQcm92aWRlciIsDQogICAgInBlcnNpc3RlbnRJZEdlbmVyYXRvciIgOiB7DQogICAgICAiQGNsYXNzIiA6ICJvcmcuamFzaWcuY2FzLmF1dGhlbnRpY2F0aW9uLnByaW5jaXBhbC5TaGliYm9sZXRoQ29tcGF0aWJsZVBlcnNpc3RlbnRJZEdlbmVyYXRvciIsDQogICAgICAic2FsdCIgOiAiWTNKRFJWaDRNM0ExYjJvelkxUktTUT09Ig0KICAgIH0NCiAgfSwNCiAgImxvZ291dFR5cGUiIDogIkJBQ0tfQ0hBTk5FTCIsDQogICJyZXF1aXJlZEhhbmRsZXJzIiA6IFsgImphdmEudXRpbC5IYXNoU2V0IiwgWyAiaGFuZGxlcjgiLCAiaGFuZGxlOTIiIF0gXSwNCiAgImF0dHJpYnV0ZVJlbGVhc2VQb2xpY3kiIDogew0KICAgICJAY2xhc3MiIDogIm9yZy5qYXNpZy5jYXMuc2VydmljZXMuUmV0dXJuQWxsQXR0cmlidXRlUmVsZWFzZVBvbGljeSIsDQogICAgImF0dHJpYnV0ZUZpbHRlciIgOiBudWxsDQogIH0NCn0=
```

Decoded:

```json
{
  "@class" : "org.jasig.cas.services.RegisteredServiceImpl",
  "id" : 883880829872605,
  "description" : "Service description",
  "serviceId" : "https://?.edu/**",
  "name" : "Service Name1",
  "theme" : "the theme name",
  "proxyPolicy" : {
    "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy"
  },
  "enabled" : true,
  "ssoEnabled" : true,
  "evaluationOrder" : 123,
  "usernameAttributeProvider" : {
    "@class" : "org.jasig.cas.services.AnonymousRegisteredServiceUsernameAttributeProvider",
    "persistentIdGenerator" : {
      "@class" : "org.jasig.cas.authentication.principal.ShibbolethCompatiblePersistentIdGenerator",
      "salt" : "Y3JDRVh4M3A1b2ozY1RKSQ=="
    }
  },
  "logoutType" : "BACK_CHANNEL",
  "requiredHandlers" : [ "java.util.HashSet", [ "handler8", "handle92" ] ],
  "attributeReleasePolicy" : {
    "@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy",
    "attributeFilter" : null
  }
}
``