Accept NoneType value as a default; Verify arguments while initializing the model object
The first issue -- sorry this is not something I intend to change. Just write a wrapper or a classmethod constructor that does the validation if you want.

>In peewee.Metadata.add_field, fields with default=None are passed, and their values are set to the pythonic default values (not sure how to call it) like '' for CharField.

This doesn't sound right to me at all.

```python
class User(Model):
    username = CharField()
    password = CharField()
    email = CharField(null=True)
    class Meta:
        database = db

db.create_tables([User])

u = User(username='foo', password='secret')
print(u.username, u.password, u.email)
u.save()

u = User.get(User.username == 'foo')
print(u.username, u.password, u.email)
```

This correctly initializes email to None and stores it as None. It is also None when read back from the db:

```
$ python x.py 
foo secret None
foo secret None
```
In [`peewee.Model.__init__`](https://github.com/coleifer/peewee/blob/528e014c640e0743c7a34069ca31754d79cc3de5/peewee.py#L6321), we set the values for the fields like this:
```python
        for k in kwargs:
            setattr(self, k, kwargs[k])
```
Let's say I am working on a `User` model with some fields like `username` or `password`, but somewhere in my code, I accidentally create an object like this:
```python
user = User(usernam='hung3a8', password='secret')
```
As you can see, I accidentally passed `usernam` instead of `username`. But as Peewee automatically set a new attribute for this arg instead of raising any kind of errors, which makes debugging becomes an actual hell. So instead of searching for the typo, maybe we should have a proper argument validation, or set those required fields as arguments and optional fields with default values as optional arguments (just like Django ORM and SQLAlchemy).

---

For some reason, `Field(default=None, null=True)` doesn't set the field value to `None`. In [`peewee.Metadata.add_field`](https://github.com/coleifer/peewee/blob/master/peewee.py#L6043), fields with `default=None` are passed, and their values are set to the pythonic default values (not sure how to call it) like `''` for CharField.
Even though we can set `NoneType` value for the field while initializing the object, doing that repetitively is troublesome. For example, with the same `User` model from the previous issue, now I also have a field called `email`, which is not required and nullable. While we can set it like this:
```python
user = User(username='hung3a8', password='secret', email=None)
```
Doing like this is much more cleaner:
```python
user = User(username='hung3a8', password='secret')  # We wont need to care about `email` anymore if the default value is set to None.
```