JCR-2113: add access control mgt support for jcr remoting

This patch provides acm support for the jcr remoting client. in this patch, the implementation of the following has been realized:

1. implementatiion of javax.jcr.security.AccessControlManager api for jcr2spi jackrabbit client that allows for the creation, retrieval and removal of access control policies.
2. jackrabbit.api.security.JackrabbitAccessControlList as the default acl policy implementation for the client.
3. jackrabbit.api.security.JackrabbitAccessControlEntry: the entries that goes in the acl.
4. extensible access control manager implementation.  creation of an access control manager is done via an AccessControlProvider, which is dynamically loaded and instantiated from a configured properties file. See  SessionImpl#getAccessControlManager() for details.

/cc @anchela @tripodsan @dbu @alexparvulescu @mduerig
is it necessary to compute the namespace from a non-empty privilege name prefix? this is currently causing problems when the jcr-server is building the multistatus xml response. the concern code-section is:

JcrSupportedPrivilegesProperty#createSupportedPrivilege(privilege) where we now have: 
Namespace ns = (prefix.isEmpty()) ? Namespace.EMPTY_NAMESPACE : Namespace.getNamespace(prefix, session.getNamespaceURI(prefix));

getPrivilege(privilegeName, ns);

To see why, if the privilege name is jcr:all and we use the jcr namespace(instead of an empty namespace), the Privlege#toXml(Document) will throw a DOMException when it is trying to create an xml element for the privilege itself. This is from the DOM createElementNS API which says:
@throws DOMException NAMESPACE_ERR: Raised if the qualifiedName has  prefix that is "xml" and the namespaceURI is
neither null nor an empty string nor
"http://www.w3.org/XML/1998/namespace", or
if the qualifiedName has a prefix different
from "xml" and the namespaceURI is null or an
empty string.

DomUtil#getPrefixedName will return jcr:jcr:all for the jcr:all privilege since we are supplying a non-empty namespace. the concerned code is this:

    public static String getPrefixedName(String localName, Namespace namespace) {
        if (namespace == null
            || Namespace.EMPTY_NAMESPACE.equals(namespace)
            || Namespace.EMPTY_NAMESPACE.getPrefix().equals(namespace.getPrefix())) {
            return localName;
        }
        StringBuffer buf = new StringBuffer(namespace.getPrefix());
        buf.append(":");
        buf.append(localName);
        return buf.toString();
    }

how about supplying a an Empty Namespace when the prefix name is not empty? i am doing this currently:)