Fix revoke local roles

Hi,
i created this pull-request to show a strange case.
My problem: if i want to remove some local roles in a context, i don't want to update localroles with the global/inherited ones.

**revoke_roles** method, takes actual_roles (a list of ALL roles in context, also inherited), makes a diff with given roles, and set the result as a new set of local roles.
So, if i set "*Contributor*" globally, after that call i have also "*Contributor*" in the list of local roles in my context and i don't like it very much.

So, i tried to add a new parameter to revoke_roles (inherit) to give chance to set only local roles and not inherited ones in the context.

This isn't a finished pull-request, i've made only the change and a test to check the behavior.
We can discuss it and If it's ok for you, then i can update the history, documentation and maybe some more tests.
I would advise using an explicit `if obj is not None` here.
I have run into issues with empty/non-empty folderish archetypes objects and conditional expressions.