Requirements checker

Wrote a simple requirements check as per #805

Not sure where to include it though, so I've left the run() method commented out at the moment... see the comments for usage.

Might be a bit messy? But it worked for the sample requirements that I've tried. Let me know what other requirements should be added and I'll try to fix it.
$optional and $explanation are not used yet.