You definitely should look at the assessment package. I think it covers many of your requirements.
It does not support permissionsing per field, but that should be possible as "questions" in an assessment are objects. Assessment is based on the content repository.
I suggest looking where assessment meets your needs and trying to figure out which features can be added to the assessment package and which should belong in a seperate package. It is possible that assessment would be used to design and manage the forms for an administrator and you might need to build a new public user interface for users to find and fill out the forms.