Allow for string names when instantiating or updating records

This provides a great added benefit of allowing to import untrusted
dictionary-like structures without having to sanitize keys before
converting them to atoms, without the risk of running out of atoms.

The performance for atom field names remains the same, string names
are somewhat slower (as expected)
Disallow mixed use of strings and atoms in record initialization/update

This allows provides better overall performance to these procedures.
Merge pull request #1740 from yrashk/record-string-fields

Allow for string names when instantiating or updating records
Ensure both strings and atoms go through the same lookup
Release v0.10.3
Bump to 0.10.4-dev
Improve record docs
Improve Enum docs and optimize ops with negative indexes
Remove deprecated and unused code branches
No need to filter raise from stacktraces
Remove unused types from formatter
Allow a module to force its debug_info to be compiled
Clean up protocol implementation setting the ground for consolidation
Fix bug where nested defmodule was shadowing alias hygiene
Deprecate @only and @except
Use GraphemeBreakProperty as in Unicode Annex #29
Update Unicode database to 6.3.0
Upgrade clustering from legacy to extended
Update CHANGELOG
Improve warn on invalid expressions