JSON Service Registry

Deals with: https://github.com/Jasig/cas/issues/498

## Summary
This is inspired by the work that Unicon has done with a JSON service registry as well as the snippet @serac shared on a given implementation. Ideas are morphed into this PR. What's radically different is perhaps the ability to types into the JSON blob via @class elements. 

## Configuration

```xml
    <bean id="serviceRegistryDao" class="org.jasig.cas.services.JsonServiceRegistryDao"
          c:configDirectory="file:/etc/cas/json" />
```

## Sample
```json
{
    "@class" : "org.jasig.cas.services.RegexRegisteredService",
    "id" : 103935657744185,
    "description" : null,
    "serviceId" : "testId",
    "name" : "testSaveAttributeReleasePolicyAllowedAttrRulesAndFilter",
    "theme" : "testtheme",
    "proxyPolicy" : {
        "@class" : "org.jasig.cas.services.RegexMatchingRegisteredServiceProxyPolicy",
        "pattern" : "https://.+"
    },
    "enabled" : true,
    "ssoEnabled" : false,
    "evaluationOrder" : 1000,
    "usernameAttributeProvider" : {
        "@class" : "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider"
    },
    "logoutType" : "BACK_CHANNEL",
    "requiredHandlers" : [ "java.util.HashSet", [ "h1", "h2" ] ],
    "attributeReleasePolicy" : {
        "@class" : "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy",
        "attributeFilter" : {
            "@class" : "org.jasig.cas.services.support.RegisteredServiceRegexAttributeFilter",
            "pattern" : "\\w+"
        },
        "allowedAttributes" : [ "java.util.ArrayList", [ "1", "2", "3" ] ]
    }
}

```
Because an Empty Map instances returned by emptyMap is not serializable.