Allow readFile() in CakeEmail to be accessed publicly

I needed this method while building a Transport, and saw no reason why it needed to be protected.
Create method readAndBase64Encode() in File utility.

Move this utility method out of CakeEmail, which allows other Mail transports to encode files manually. Maintains BC.
Make readBase64 an instance method

Leverage the existing code in File::read() and simply add in chunking and base64 encoding.
Add/fix docblocks.
Add to docblock the reason why the output is chunk_split
Update link url to revised method name
Change variable name to be descriptive
Get many the SQL generation for many column types working.
Requiring the definition of empty methods is annoying.

Use method_exists() to make optional methods optional.
Implement basic indexes for postgres.

Only some indexes can be defined during table creation. Other
indexes need to be defined after table creation. This also
includes table comments, which will need to be handled separately.
Separate index + constraint.

Conflating the two makes generating the correct SQL harder as some
databases have very different ways of including constraints and indexes.
Update MySQL schema to match how things will need to work.

createTableSql will now need to get additional parameters to account for
how postgres and sqlite need to create indexes + constraints
differently.
Remove duplicated code.
Add name() to Table class.

This allows index creation in sqlite and is a nice accessor to have.
Fix/add index generation to Sqlite.

Previously Sqlite could not create standard indexes for optimizing
queries. Now it can create basic unsorted indexs like other databases.
Make constraint generation simpler to read.
Add index/constraint support to PostgresSchema.
Pass the table instance into createTableSql

This will allow postgres to preserve comments. Comments in postgres need
to be separate commands.
Add column comment support to postgres.
Fix failing test.