Consolidate Document and SoruceFile

Document used to be a superset of SoruceFile, consolidate these into one notion
Note: ByteOrderMark is required as it affects the output, and all users of the createSourceFile should think about, where as version and isOpen are LS-specific notions and not every user need to know about them per se.