[Finishes #83360590] new Contract Match level type for MSM assessment

This branch adds a new level type "Contract Match" which displays a simplified form for specifying a MSM-style function contract, and successfully completes the level if the contract specified matches the one in the level definition.

The contract to match is specified in the level editor with a simple pipe-delimited text-based format. Take this simple example:

The level specified by this content:
```
name 'new contract match level'
title 'Enter title here'
content1 'Create a contract with the function name "Contract Name", range of Number, and domain Domain1 of type Number, and Domain2 of type string.'
answer 'Contract Name|Number|Domain1:Number|Domain2:string'
```

can be completed by specifying the contract form like this:

![image](https://cloud.githubusercontent.com/assets/56541/5272426/aac98448-7a31-11e4-9ee7-6b9b21627763.png)

This PR also includes some refactoring on the view helpers to avoid duplicating some code.