Refactored CSV export functionality to sit in it's own class.

I have split out CSV exporting functionality into it's own class.

Note the folder structure and interface I've created. What are your thoughts on these?

Yes this probably needs unit tests. I just wanted to get this work out for people to review for now.

Relates to (but doesn't fix) #2802 #2431 #3408

Also resolves this: http://stackoverflow.com/questions/17502299/how-to-export-all-rows-as-csv-in-modeladmin-silverstripe-3-1
Instead of using argument typehints it's enough to phpdoc the @param. You can only do it with 'array' types anyway.

Also please phpdoc all method descriptions, arguments, and return types.