Parse Transform for cleaner developer experience

## sqerl_gobot

The `sqerl_gobot` got it's name because at first, it seemed like a transformer knockoff. Also, there's another module called `sqerl_transformers` and I thought calling it `sqerl_transform` would get too confusing.

### Exprecs functionality
The first thing it does is provide a dumbed down version of `exprecs`. Since exprecs was built to allow you to export multiple records from a single module, it had to a lot more work than we needed. The exprecs-ish functions we've preserved are:

* `'#new'/0`
* `getval/2`
* `'fromlist/1`
* `fields/0`
* `'#is'/1`
* `setvals/2`

This PR suggests that functions with the intent of being called mostly by `sqerl_rec` internals be prefixed with a `#`, but people can use whatever functions they want.

### Types
We've also exported a type to encapsulate the record completely, take the following record:

```erlang
-record(notifier_config_object, {
    name :: string(),
    rank :: string(),
    serial_no :: integer(),
    non_typed
}).
```

It exports the following dialyzer types:

```erlang
-type notifier_config_object() :: #notifier_config_object{}.

-type attr() :: name | rank | serial_no | non_typed.

-type prop() :: {name, undefined | string()}
              | {rank, undefined | string()}
              | {serial_no, undefined | integer()}
              | {non_typed, any()}.

-export_type([{attr,0},{notifier_config_object,0},{prop,0}]).
```

### sqerl_rec abstractions
have been tabled from this PR. The code still exists in the parse_transform, albeit commented out. We can revisit this in the future.
Why unpack and repack the records here? I think you could either take it as a single bound variable or if you want the matching, perhaps:
```
who_types_the_untyped(#state{} = TheState) ->
    TheState.
```