Clean up, split out, and document PreClass

Summary: Working on refactoring Unit/Class/Func loading.  This just moves
PreClass into its own files, refines the includes, documents as much as
possible, organizes the API, and eliminates the unnecessary
setUserAttributes() by inlining its functionality into PreClassEmitter.

We should be able to get rid of the mutableFoos() methods once the
loader refactor is done.

Reviewed By: @elgenie

Differential Revision: D1398297