[Soc2014] The new Options API

# Main API

get_fields(m2m, data, related_m2m, related_objects, virtual,
include_parents, include_non_concrete, include_hidden, include_proxy) -> (field, field, ...)

get_field(field_name, m2m, data, related_m2m, related_objects, virtual) -> field

# Cached properties for fast access
fields -> (field, field, ..)
concrete_fields -> (field, field, ...)
local_concrete_fields -> (field, field, ...)
field_names (field_name, field_name, ..)

# Benchmarks
(compared to master)

| Benchmark Name | Control | Experiment | Diff |
| -------------- | ------- | ---------- | ---- |
| default_middleware | 0.0004362226 | 0.0004246712 | 0.0000115514 (2.65% faster) |
| form_clean | 0.0000272989 | 0.0000275135 | -0.0000002146 (0.79% slower) |
| form_create | 0.0001109242 | 0.0001112223 | -0.0000002980 (0.27% slower) |
| l10n_render | 0.0062908888 | 0.0062882066 | 0.0000026822 (0.04% faster) |
| locale_from_request | 0.0009182096 | 0.0008761168 | 0.0000420928 (4.58% faster) |
| model_creation | 0.0002615690 | 0.0002635717 | -0.0000020027 (0.77% slower) |
| model_delete | 0.0004529595 | 0.0004537106 | -0.0000007510 (0.17% slower) |
| model_save_existing | 0.0140781879 | 0.0141631722 | -0.0000849843 (0.60% slower) |
| model_save_new | 0.0142477393 | 0.0143943310 | -0.0001465917 (1.03% slower) |
| multi_value_dict | 0.0001862049 | 0.0001817822 | 0.0000044227 (2.38% faster) |
| qs_filter_chaining | 0.0008456469 | 0.0008743525 | -0.0000287056 (3.39% slower) |
| query_aggregate | 0.0003216028 | 0.0003249884 | -0.0000033855 (1.05% slower) |
| query_all | 0.0257554889 | 0.0227905393 | 0.0029649496 (11.51% faster) |
| query_all_multifield | 0.0438728333 | 0.0428434610 | 0.0010293722 (2.35% faster) |
| query_annotate | 0.0006907701 | 0.0006716847 | 0.0000190854 (2.76% faster) |
| query_complex_filter | 0.0001335382 | 0.0001367807 | -0.0000032425 (2.43% slower) |
| query_count | 0.0002358913 | 0.0002363205 | -0.0000004292 (0.18% slower) |
| query_dates | 0.0005417109 | 0.0005506992 | -0.0000089884 (1.66% slower) |
| query_delete | 0.0002625823 | 0.0002618313 | 0.0000007510 (0.29% faster) |
| query_delete_related | 0.0003587127 | 0.0003515840 | 0.0000071287 (1.99% faster) |
| query_distinct | 0.0003293872 | 0.0003280401 | 0.0000013471 (0.41% faster) |
| query_exclude | 0.0005098820 | 0.0005091906 | 0.0000006914 (0.14% faster) |
| query_exists | 0.0009244204 | 0.0009700894 | -0.0000456691 (4.94% slower) |
| query_filter | 0.0004378438 | 0.0004338264 | 0.0000040174 (0.92% faster) |
| query_get | 0.0273146629 | 0.0276034474 | -0.0002887845 (1.06% slower) |
| query_get_or_create | 0.0012972713 | 0.0013241529 | -0.0000268817 (2.07% slower) |
| query_in_bulk | 0.0004895210 | 0.0004980445 | -0.0000085235 (1.74% slower) |
| query_iterator | 0.0002929449 | 0.0002978802 | -0.0000049353 (1.68% slower) |
| query_latest | 0.0004072666 | 0.0003974438 | 0.0000098228 (2.41% faster) |
| query_none | 0.0001397491 | 0.0001383185 | 0.0000014305 (1.02% faster) |
| query_order_by | 0.0003699064 | 0.0003746271 | -0.0000047207 (1.28% slower) |
| query_prefetch_related | 0.1078729749 | 0.1069629908 | 0.0009099841 (0.84% faster) |
| query_raw | 0.0150730968 | 0.0149809599 | 0.0000921369 (0.61% faster) |
| query_raw_deferred | 0.0185308099 | 0.0186409950 | -0.0001101851 (0.59% slower) |
| query_select_related | 0.0593896270 | 0.0591346741 | 0.0002549529 (0.43% faster) |
| query_update | 0.0002336740 | 0.0002405643 | -0.0000068903 (2.95% slower) |
| query_values | 0.0003104687 | 0.0003149390 | -0.0000044703 (1.44% slower) |
| query_values_list | 0.0003035903 | 0.0003027320 | 0.0000008583 (0.28% faster) |
| raw_sql | 0.0000516653 | 0.0000538826 | -0.0000022173 (4.29% slower) |
| template_compilation | 0.0005917907 | 0.0005932689 | -0.0000014782 (0.25% slower) |
| template_render | 0.0123526216 | 0.0124703288 | -0.0001177073 (0.95% slower) |
| template_render_simple | 0.0001161218 | 0.0001118422 | 0.0000042796 (3.69% faster) |
| url_resolve | 0.0177175641 | 0.0174574852 | 0.0002600789 (1.47% faster) |
| url_resolve_flat | 0.2262574315 | 0.2253849983 | 0.0008724332 (0.39% faster) |
| url_resolve_flat_i18n_off | 0.3284479976 | 0.3124730945 | 0.0159749031 (4.86% faster) |
| url_resolve_nested | 0.0001258850 | 0.0001255035 | 0.0000003815 (0.30% faster) |
add this test to `model_meta/test.py` -- otherwise I think this file is mostly identical, right?